PHPで、文字コードをシフトJISでプログラムを組んでいるのですが、フォームから「製造」という文字の前後に英字があるテキストをPOSTすると英字以外が消えてしまいます。


例:
ABC製造→ABC
XYZ製造ファイル→XYZ
製造(A)→(A)

英字ではなく日本語だと問題なくPOSTされます。

例:
あいうえお製造→あいうえお製造

対処法をご存知の方がおられましたら教えて下さい。

ちなみにシフトJISでよく問題になる「能」「表」等を含むテキストは問題なくPOSTされます。

回答の条件
  • 1人2回まで
  • 登録:2007/03/12 21:50:14
  • 終了:2007/03/14 22:23:22

回答(3件)

id:Yota No.1

Yota回答回数453ベストアンサー獲得回数282007/03/13 09:13:11

ポイント35pt

こういうスクリプトを作ってそちらの環境で試してください。

文字が落ちますか。

<html>

<body>

mb_internal_encoding('SJIS') ;

if(isset($_POST['str'])) echo $_POST['str'] ;

?>

<form method="POST">

<input type="text" name="str">

<input type="submit">

</form>

</body>

</html>

id:petrichor

回答ありがとうございます。

試してしましたら、文字化けしてしまいました。

試しに

if(isset($_POST['str']))echo mb_convert_encoding($_POST['str'], "SJIS", "auto");

としてみると、やっぱり文字が消えてしまいます。

2007/03/14 09:42:49
id:toteri No.2

yoccola回答回数52ベストアンサー獲得回数32007/03/14 03:16:49

ポイント35pt

勘ですが

ABC製造⇒UTF-8

あいうえお製造⇒Shift-JIS

という風に文字コードを自動認識してしまうのではないでしょうか?

実行ファイルのトップ、

もしくはファイルのトップでincludeしているファイルの中で

header('Content-Type: text/html; charset=Shift-JIS');

を記述して見てください。

id:petrichor

回答ありがとうございます。

これは元々のファイルに入れていたのですがテスト用に入れるの忘れてました。

一応テスト用にも入れてみましたがダメでした。

で、思いついて試しに$str=mb_convert_encoding($str, "SJIS", "auto");を$str=mb_convert_encoding($str, "SJIS", "EUC-JP");にしてみたら、解決しました!

2007/03/14 22:20:35

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 Yota 453 431 28 2007-03-14 11:15:32
  • id:tezcello
    Shift-JIS はいろいろ問題が多いので、スクリプトを記述するのには不適の様だというのは、とりあえず置いておいて...。

    「消えてしまう」というのはどういう事でしょうか?
    PHPスクリプトに伝わらない($_POSTから得られる値に漢字部分が無い)のか、
    PHPスクリプトが表示したページに漢字部分が無いのか?

    それから、mb_language, mb_internal_encoding, mb_http_output は想定している値となっているか、本当に入力された(POSTされた)文字列はShift-JISなのか、を確認された方がよろしいのでは?
  • id:petrichor
    コメントありがとうございます。
    職場の環境なので、仕方なくシフトJISでして…。
    個人的には普段EUC-JPを使っているためほぼ文字化け関連には悩まされないので、余計につまづいてしまってます。
    php.iniの設定をそのつど変えようかとも思ったのですが、スクリプトを記述しているのがメモ帳(シフトJIS)なので、結局シフトJISでいくことに。

    mb_languageはJapanese、mb_internal_encodingはEUC-JP、mb_http_outputはSJISになってます。

    そのままPOSTすると化けるので、mb_convert_encodingでシフトJISに変換して出力してます。
    すると、質問のような結果になります。

    「製」「造」「単」が含まれるとこの現象が起きるのを確認しました。

    スクリプトは以下のようにして試しています。
    これで、たとえば「ABC製造」と入力して実行すると、「ABC」とechoされます。

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />
    </head>
    <body>
    <?php
    function HENKAN($str){
     $str=mb_convert_encoding($str, "SJIS", "auto");
     return $str;
    }

    echo HENKAN($_POST['text']);
    ?>

    <form action="./test.php" method="post">
    <input name="text" type="textbox" size="100" />
    <input name="input" type="submit" value="実行" />
    </form>

    </body>
    </html>
  • id:mine-D
    http://www.shtml.jp/mojibake/sjis_cgi.html#php

    php.iniでMagic Quotes GPCをOFFに設定するとどうでしょうか。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません