PHPの文字化けについて質問です。

PHP(ver5.2.10)でMySQLに接続し、データーベース内のデータを検索して表示するというような検索システムを作成しているのですが、一部文字が文字化けしてしまいます。

PHPで

$keyword = htmlspecialchars($_POST['keyword']);
print $keyword;

とすると

  一般 → □ 般
  ホワイト → □ □ □ □

のように文字化けします。

また、PHP内に

ini_set("output_buffering", "On");
ini_set("output_handler", "mb_output_handler");
ini_set("default_charset", "utf8");
mb_language("Japanese");
mb_internal_encoding ("utf8");
mb_http_input("auto");
mb_http_output("utf8");
mb_detect_order("auto");
mb_substitute_character("none");
ob_start("mb_output_handler");

何も表示されなくなりました。

漢字やひらがな等は表示されるのですがカタカナは全て文字化けしています。

MySQLやPHPは全てUTF-8に統一しています。
何かご存知の方いらっしゃらないでしょうか?
よろしくお願いします。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2009/09/29 10:33:58
  • 終了:2009/09/29 15:06:05

回答(1件)

id:tamo2_xvi No.1

tamo2_xvi回答回数436ベストアンサー獲得回数102009/09/29 12:24:17

ポイント80pt

http://takapop2ch.blog103.fc2.com/blog-entry-7.html

PHPもMysqlも設定ファイル上でUTF-8に設定されて一部文字が化けるとの事ですが

現在ではUTF-8が主流ですが、大昔Postgres+PHPを使用時に携帯の絵文字にも対応して使えたのは

EUCでした。

当時はまだPHPは4になったばかりで文字コードの変換をやらせると、なぜかよく化けてました。

あまり参考にならないかと思いますが、一度EUCでもお試しください。

<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">

あとhtmlのheadにこちらも入れてお試しください。

  • id:lily0717
    自己解決したのでご報告します。
    ご回答いただいたtamo2_xvi様、ありがとうございました。

    原因なのですが・・・・
    PHP上で、POSTで渡されたデータを取得する際

    $keyword = $_POST['keyword'];
    $keyword = ereg_replace("[  ]+", " ", $keyword);
    $keyword = trim($keyword);

    のようにして、空白を削除していたのですが

    $keyword = $_POST['keyword'];
    $keyword = str_replace(" ", " ", $keyword);
    $keyword = trim($keyword);

    にしたら、普通に動作するようになりました。
    一応参考書片手にやってたのですが・・;;
    お騒がせして、すみません!!勉強します。

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

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

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

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