• ベストアンサー
  • 困ってます

IE6で文字化け します。

IE6で文字化け します。 以下のURLが、IE6で文字化けします。(IE8やMozillaでは正常です) http://cgi.geocities.jp/rhcpf907/fml2tex/?%BC%B0%A1%E3%20%A6%B2_{n=1}^N%20a_n%20%A6%B7_n%A1%A2%A6%B2_{m=1}^M%20b_m%20%A6%B5_m%20%A1%E4%20%A1%E1%A6%B2_{n=1}^N%A1%A1%A6%B2_{m=1}^M%A1%A1a_n^{*}b_m%20%A1%E3%A6%B7_n%A1%A2%A6%B5_m%20%A1%E4 IE8と見比べて頂けるとわかるのですが、<や> がおかしくなります。 回避策がありましたら、お教え下さい。 プログラムは、以下です。  $qstr = rawurldecode($_SERVER["QUERY_STRING"] );   :   :   if (strlen($qstr) <= 2){     return 'CanNotEncode';   }   // 自動検出   $encd = mb_detect_encoding($qstr, 'EUC-JP,SJIS,UTF-8,JIS');   if ($encd != ''){     $expr = mb_convert_encoding($qstr,"SJIS", $encd);     if ( mb_substr('式',0,1,'SJIS') == mb_substr($expr,0,1,'SJIS') ){       return $expr;     }   }   // Yahooブログ(EUC-JP) だけは救う   $expr = mb_convert_encoding($qstr,"SJIS", 'EUC-JP');   if ( mb_substr('式',0,1,'SJIS') == mb_substr($expr,0,1,'SJIS') ){      return $expr;   }   return 'EncodeFail ['.substr($qstr,0,8).']'; }   :   : // $exprから"式”を取り去って全角→半角にして MineTeX.cgi に渡す

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数657
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

URLとして解釈しづらい文字列が散見されますが、きちんとエンコードなさったほうがよいかと。 受けたデータが正しければ、適切なhttpヘッダーとmetaなどで宣言をすれば ある程度文字化けは回避できるかと。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

アドバイスありがとうございます。 このCGIの使われ方は、<img src="http://cgi.geocities.jp/rhcpf907/fml2tex/?式y=x^2"> とか、Yahooブログの場合は、Wiki文法で [[img(http://cgi.geocities.jp/rhcpf907/fml2tex/?式< Σ_{n=1}^N a_n Ψ_n、Σ_{m=1}^M b_m Φ_m > )]] のように、ユーザが 直接URLを打ち込む使い方をするものです。 したがって、エンコードは、ブラウザ任せになると思います。 何かブラウザのエンコードを強制させる方法がありましたら、お教え下さい。

質問者からの補足

どういう現象かは、 http://blogs.yahoo.co.jp/kafukanoochan/63268944.html を、IE6とIE8 で見て下さい。 「<」や「>」が、変になります。 尚、コメント欄のHirotaさんという方のコメも参考にして下さい。

関連するQ&A

  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • CSVダウンロードがうまくいきません

    CSVダウンロードがうまくいきません。 次のように書いています。 OCIExecute($stmt); // データのFetch while (OCIFetch($stmt)) { $a = trim(OCIResult($stmt, "A")); $b = mb_convert_encoding(OCIResult($stmt, "B"), "SJIS", "EUC-JP"); $c = mb_convert_encoding(OCIResult($stmt, "C"), "SJIS", "EUC-JP"); $d = mb_convert_encoding(OCIResult($stmt, "D"), "SJIS", "EUC-JP"); $e = mb_convert_encoding(OCIResult($stmt, "E"), "SJIS", "EUC-JP"); $f = trim(OCIResult($stmt, "F")); $g = trim(OCIResult($stmt, "G")); ?> <?=$a ?>,"<?=$b ?>","<?=$c ?>","<?=$d ?>","<?=$e ?>",<?=$f ?>,<?=$g ?>, <? } エラーがたくさん出ています。教えてください! $a=number型 $b=verchar2型 $c=verchar2型 $d=verchar2型 $e=verchar2型 $f=number型 $g=date型

    • 締切済み
    • PHP
  • PHPの文字化け回避方法

    PHPとDB(MySQL)を使用したアプリケーションを作成しています。 しかし特定の文字(表や能など)をDBに入力し再度PHPで表示すると文字化けします。 調べて対策を行いましたが改善されません。 (対策) DBに格納する前にデータをすべてmb_convert_encoding($goo, "EUC-JP", "SJIS");でエンコード 読み込む際にはmb_convert_encoding($goo, "SJIS", "EUC-JP")と戻す。 又、magic_quotes_gpcもoffに。 しかしながら一向に改善されません。どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯の文字化け

    パソコンで入力したお知らせをパソコンと携帯で確認できるようにしたものを、サーバーを移管したところ、携帯で見る方だけ文字化けをおこすようになりました。 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> です。 // 表示文字コード define("ENCDISP", "shift_jis"); // データベース文字コード define("ENCDB", "EUC-JP"); // ========================================================= // 表示する文字コードに変換 // ========================================================= function cnv_dispstr($string) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, "EUC-JP, SJIS"); if ($det_enc and $det_enc != ENCDISP) { return mb_convert_encoding($string, ENCDISP, $det_enc); } else { return $string; } } ちなみにこういうのを入れてみてもだめでした。 すいませんが教えてください。

    • 締切済み
    • PHP
  • 文字化けについて

    お世話になります 携帯サイトの文字化けに困っています。 MysqlのデータはEUC-JPなので 携帯サイトにデータを出力するのにShift-JSにしないと文字化けするというところまで調べました。 function cnv_dispstr($string) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, "Shift-JIS,EUC-JP"); if ($det_enc and $det_enc != ENCDB) { return mb_convert_encoding($string, ENCDB, $det_enc); } else { return $string; } } このようにしたのですが、 Mysqlから出力したデータ部分の文字化けが解決しません。 アドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP + SQLite 文字化けについて

    SQLite と php5でデータベース管理画面を作っていますが、 日本では正常に表示されますが、 中国からアクセスすると文字化けしてしまいます。 文字はソース上で下記のように設定しています。 mb_convert_encoding($aaa,"SJIS","EUC-JP"); SQLiteが、SJISに対応していないと思い、 monospaceに変換するように下記のように変更しました。 mb_convert_encoding($aaa,"monospace","EUC-JP"); しかし、画面上で Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unknown encoding "monospace" in C:\Apache Group\Apache2\htdocs\aaa\aaa.php on line XXX と出ます。 なにか解決策をご存知の方いらっしゃいましたら お教えいただけると幸いです。 どうぞよろしくお願いいたします。 なお、ページ自体の文字設定は、 <meta http-equiv="Content-Type" content="text/html; charset=S-JIS">となっているところ、 ソース変更にともないこちらも、charset=monospace">と変更しました。

    • 締切済み
    • PHP
  • SJIS→EUCに送っても文字化けしない

    htmlは、SJISで作っています。 PHPは、EUCで作っています。 普通は文字化けをするため、mb_convert_encoding関数を用いますが、 なぜか、この関数を使わなくても、文字化けしません。 友人は、有り得ないと言います。 事実、友人PCではmb_convert_encoding関数で文字化けを直してました。 私も友人に同感で、SJIS→SJISやEUC→EUCなら文字化けしないけど、文字コードが違うのです。違うから、mb_convert_encoding関数を使うと、思っているのですが‥‥ 設定が違うのかと思い、友人の、php.iniなどいくつかのファイルを私のPCに上書きしてもらいましたが、変わりませんでした。 こういうことってあるのでしょうか? 文字化けしないなら、mb_convert_encoding関数を使わなくて良いので、楽だと思いましたが・・・ 何かの不具合なら、いざ完成した時、またmb_convert_encoding関数をいれる手間がありますし、どうしようか迷っています。 本には、「文字化けしない場合もある」という記述は一言も書いてありませんでした。 逆に、「文字化けするからmb_convert_encoding関数を用いる」と大きく書いてあるぐらいです。 何かの設定なのでしょうか? ソフトのバージョンも、同じでした。不思議です。

    • ベストアンサー
    • PHP
  • mb_send_mailの2重投稿を防止したい

    初めて質問させていただきます。 動作環境はPHP4.3.0になります。 <? $to = "test@test.com"; $subject = "テスト"; $addheader = "From: $_POST[mail]\n"; $msg = "*************"; $to = mb_convert_encoding($to, "SJIS", "EUC-JP"); $subject = mb_convert_encoding($subject, "SJIS", "EUC-JP"); $msg = mb_convert_encoding($msg, "SJIS", "EUC-JP"); $addheader = mb_convert_encoding($addheader, "SJIS", "EUC-JP"); mb_language("Ja"); mb_internal_encoding("SJIS"); mb_send_mail($to, $subject, $msg, $addheader); setcookie("formdata", $posted , time()-1200); }; ?> 上記の用に記述をして、メールが届くのは確認をしたのですがなぜか9割位の確立でメールが二通届きます。 mb_send_mailの前後にecho分で文字を表示させたのですが、ループしている気配もありません。 どなたかこの現象を回避できる方法をお知りでしたらご教授下さい。 何卒、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Shift-JISからUTF-8への変換が出来ません

    初歩的な質問で申し訳ありませんが、大変困っております。ただいまimagettftext()を使って日本語主力したく悪戦苦闘しております。  ページ自体はShift-JISで制作していますのでimagettftext()で日本語を出力する場合はUTF-8へ変換して出力するところまでは知れべていて分かりました。しかしいざmb_convert_encoding()で変換しようとするとなぜかUTF-8へ変換されません。 $str = mb_convert_encoding($str,"UTF-8","SJIS"); print mb_detect_encoding($str);  結果→SJIS しかしこれがEUC-JPなら変換されます。 $str = mb_convert_encoding($str,"EUC-JP","SJIS"); print mb_detect_encoding($str);  結果→EUC-JP なぜなのか原因が分からなく困っております。 どなたかご教授願いませんでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • PHPで変数の文字コードをまとめて変えたい

    初めまして、 PHPで変数 $a1から$a100 に入っている文字コードをまとめて変更したいのですが可能でしょうか? $a1 = mb_convert_encoding($a1, "SJIS", "auto"); $a2 = mb_convert_encoding($a2, "SJIS", "auto"); 上記のように$a1から$a100まで入力するしかないのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP