• ベストアンサー

mb_convert_encodingのタイミング

検索フォームがあるphpファイルはShift_JISですが、検索を問い合わせるデータベースがEUC-JPになっています。 <form action="search.php" method="post"> <input type="text" name="keyword" size=30> <input type="submit" value="検索"> </form> 検索フォームで入力されたキーワードをmb_convert_encodingでShift_JISに変換してからpostしたいのですが、search.phpで検索キーワードを受け取る前にエンコード変換することは無理なのでしょうか?

  • 240t
  • お礼率60% (21/35)
  • PHP
  • 回答数2
  • ありがとう数3

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

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

>Shift_JISに変換してからpost おっしゃる意味がよくわからないのですが、 HTML側で先にコンバートする・・・ということですか? もしそうであればPHPが動いているのはサーバー側なので データが送られてこないことには話になりません。 ですのでご希望の命題を達成することはできません。 受け取った側で変換すればすむのでは?

240t
質問者

お礼

どうもありがとうございました。 受け取った側で変換することができました。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

ANo.1の方も書かれていますが、普通はSJISのhtmlからはSJISでPOSTされます。なので受け取った直後に変換してしまうのが吉だと思います。   if ($_POST) {     $keyword = $_POST['keyword'];     if (get_magic_quotes_gpc()) { $keyword = stripslashes($keyword); }     $keyword = mb_convert_encoding($keyword, 'EUC-JP', 'SJIS')     } #場合によっては「間違いなくSJISでPOSTされているか」を確認した方がベターではありますが・・

240t
質問者

お礼

どうもありがとうございました。

関連するQ&A

  • mb_convert_encoding で?になる。

    $old = "名前"; $new = mb_convert_encoding($old,"EUC-JP","auto"); echo "$new"; 上のスクリプトを実行すると、’名前’が半角の’?’に なるんですよー。 何ででしょうか? ページもEUC-JPだし、phpもEUCです。 PHP Version 4.3.10で、php.iniの mbstring.internal_encodingはEUC-JPです。 OSは、テストなので自分のPCのw2kです。 mb_convert_encodingが実験的だからなのでしょうか? 他にも同じようになる物があるのでしょうか? 対処方法はあるのでしょうか?

    • ベストアンサー
    • PHP
  • mb_convert_encodingについて

    Fatal error: Call to undefined function: mb_convert_encoding() in c:\apache\htdocs\test\03-03\common.php on line 27 上記のエラーがでます。 mb_convert_encoding[文字エンコーディングを変換する] を利用するにはphp.iniで設定の変更などありますか?

    • ベストアンサー
    • PHP
  • 文字エンコーディングについて質問

    フォームで、mb_convert_encodingで文字エンコーディングしたいのですが $keyword=$_GET["keyword"]; $keyword = mb_convert_encoding( $keyword, 'UTF-8', 'Shift_JIS' ); で問題なく変換できるのですが、 フォームを使用した時にどのようにしたら良いのでしょうか? 下記のコードにmb_convert_encodingを使用するにはどのようにしたら良いのでしょうか? <input type="hidden" name="keyword" value="<?php print(htmlspecialchars($keyword, ENT_QUOTES )); ?>"> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • htmlはSJIS PHPはEUC mb_convert関数を使っても文字化けします

    htmlは、Shift-JISで作っています。 PHPは、EUCで作っています。 PHPのPOSTで、文字の部分は、 mb_convert_encoding($_POST[abc],"EUC","SJIS")です。 この関数であれば、文字化けしないはずなのですが・・・ フォームに「あいうえお」と入力すると、、「、、、ヲ、ィ、ェ  と入力されてしまいます。 PHP.iniを確認したのですが、mb_convert関数は有効になっています。 因みに、会社の上司もxamppを持っており、htmlとPHPファイルだけコピーさせてもらって、確認したのですが、同じ現象が起こります。 会社のPCと、インストールした物も設定もしたものも同じ。 文字に関わるPHP.iniやmy.confなどを、一応上書きさせてもらったのですが、変わりません。 会社のPCと、全く同じ設定なのに、何故、私のファイルだけ‥‥mb_convert関数が使えないのか? 私のhtmlかPHPに、何かがあるのでしょうか? htmlはMETAタグでSJISにしています。 原因不明で、どうしたらいいのかパニックしています。

    • ベストアンサー
    • PHP
  • mb_convert_encoding()

    メール送信フォームの作成の際に Fatal error: Call to undefined function: mb_convert_encoding() というエラーがでてしまったのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1661461 の例にあったように php.iniを変更したのですが反映されません。 (apacheの再起動もしました。) php_mbstring.dllがないような気もしますが どのように確かめたらいいのか教えてください。 環境は OS:FreeBSD4.11 PHP:PHP4.4.0

    • ベストアンサー
    • PHP
  • mb_convert_encodingとUTF

    mb_convert_encodingでUTF-8>JIS変換行う場合 $fileにファイル内容全部が読み込まれた状態で、mb_convert_encoding($file, "JIS", "UTF-8")とした場合、$fileの冒頭に?という文字化けが残ります。 これを削除もしくは表示させないようにするにはどうしたらよいのでしょうか? if(($buf = mb_convert_encoding(file_get_contents("$file"), "jis","utf-8"))<>""){ $file = tmpfile(); fwrite($file, $buf); rewind($file); if((flock($file,LOCK_EX))!==false){ while(!feof($file)){ $str = fgetcsv($file,1000,","); <処理~~~~> } } fclose($file); }

    • ベストアンサー
    • PHP
  • 【PHP】mb_convert_encoding()で "~" 等が化ける

    PHP5.2.4 使用者です。(レンタルサーバー) 例えば、サーバー及び記述の文字コードがEUC-JPだとして、 $str = "~"; $str = mb_convert_encoding($str , 'UTF-8', 'EUC-JP'); とすると "?" に化けてしまいます。 調べたところ、マルチバイト文字の ~ ¬ ∥ - ¢ £ \ は対応するコードがないから化けるとか… "~" はよく使う文字ですし、そんな簡単に化けられては困るんですが… プロの方はこういうのどう処理してるのでしょう。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mb_convert_encoding で 一部の文字が変換できない。

    こんにちは、初めて質問させていただきます。 PHPでテキストファイルに保存されたEUC-JPの文字列情報を UTF-8で表示しようとしています。 第一水準、第二水準程度の日本語は問題なく変換ができてるのですが、 「(7)」や「VII」などの特殊な記号文字が変換できないようです。 これは mb_convert_encoding の仕様なのでしょうか? ご存知でしたらご教授お願いいたします。 【ソース】 $buffer = "マル4→(4) ギリシャ4→IV 郵便番号→〒 株式会社→(株) \n"; echo mb_convert_encoding($buffer, "utf-8", "euc-jp"); 【出力結果】 マル4→? ギリシャ4→? 郵便番号→〒 株式会社→? 【環境情報】 Linux (OS、バージョン詳しくは分かりません。) PHP Version 4.3.9 mbstring.detect_order      no value mbstring.encoding_translation  Off mbstring.func_overload      0 mbstring.http_input       pass mbstring.http_output       pass mbstring.internal_encoding    EUC-JP mbstring.language        Japanese mbstring.script_encoding     no value mbstring.substitute_character  no value (Local Value、Master Value 共に同値です。)

    • ベストアンサー
    • PHP
  • mb_convert_encoding() エラー

    http://www18.tok2.com/home/koumori27/xml/pxml/pxml2.htmlのxmlpaser_sample1.php3を自分のパソコンで試したら、Fatal error: Call to undefined function: mb_convert_encoding() in c:\php\xmlpaser_sample1.php on line 99と出ました。 http://www.php.net/manual/ja/ref.mbstring.php#ini.mbstring.languageに書いてある 例 1. php.ini 設定の例 mbstring.language = Japanese; mbstring.internal_encoding = UTF-8 ; mbstring.encoding_translation = On mbstring.http_input = auto ; mbstring.http_output = UTF-8 ; mbstring.detect_order = auto ; mbstring.substitute_character = none ; と http://oshiete1.goo.ne.jp/kotaeru.php3?q=293266 に書いてある方法を試しましたが Fatal error: Call to undefined function: mb_convert_encoding() in c:\php\xmlpaser_sample1.php on line 99 が直りません。 どうすれば直るのでしょうか?

    • ベストアンサー
    • PHP
  • i18n_convert と mb_convert_encoding の違い

    メールの文字化け問題で色々ここも見たのですが ズバリ $enc = mb_detect_encoding($body); $body = mb_convert_encoding($body,"AUTO",$enc); と $enc = mb_detect_encoding($body); $body = i18n_convert($body,"AUTO",$enc); の違いが分かりません。 同じ事をしていると思うのですが・・・。 あと、受信するメーラーや PCが変わると 本文が文字化けしたりしなかったりで "AUTO"の部分をJISにしたらまず文字化けします AUTOなら良かったり良くなかったりです php.iniのこともよく出ていましたが 今レンタルサーバー使っています PHP 4.3.2 を入れているようです 文字コードについてはサーバー管理者に聞かないといけないのでしょうか パリッと文字化けしないようにしたいのですが 何かいい方法はないでしょうか?

    • ベストアンサー
    • PHP