WAMPローカル環境で突然文字化けするように

このQ&Aのポイント
  • WAMP初級者です。いままでPEAR::DBを使って作っていたサイトがあり、PDOを使うように修正をしているのですが、いろいろ試しても画面が真っ白になってしまうようになりました。
  • 単純にPOSTで受け取った情報を単純に表示するだけのコードで試したところ、文字化けするようになってしまいました。いままでPEAR::DBを使っていたサイトはUTF-8で統一されているので、どこか設定が間違っているのか迷っています。
  • 検索をして飛んだ先で「aaa」と表示されてしまいます。なぜ画面が真っ白になるのか、文字化けするのか、理解できずに困っています。環境はPHP5.2(古いので、この件が片付いたらバージョンアップする予定です)、Windowsです。
回答を見る
  • ベストアンサー

WAMP ローカル環境で突然文字化けするように

WAMP初級者です。 いままでPEAR::DBを使って作っていたサイトがあり、PDOを使うように修正をしているのですが、いろいろ試しても画面が真っ白になってしまうようになりました。 そこで、いったんPDOを理解するために、下記のような小さなプログラムを作ってしっかり理解してから、取り組もうといろいろ試しましたが、やっぱり画面が真っ白になってしまいました。 なので、今度は念のため、単純にPOSTで受け取った情報を単純に表示するだけのコードでためしたところ、今度はなぜか文字化けするようになってしまいました。。 「???」のような表示ではなく、「・・・」のような表示です。 いままでPEAR::DBを使っていたサイトは(過去に文字化けで苦労した時代はありましたが)いまはちゃんとUTF-8で統一したので、文字化けは解消されています。 どこか設定をいじった記憶もなく、突然初歩的なPHPも動いてくれなくなってしまって途方にくれています。PEAR::DBを使ってちゃんと動いていたサイトは、文字化けしません。 今回やったことのどこが悪いのか、路頭にまよっています。 どなたかヒントをいただけないでしょうか? 環境はPHP5.2(古いので、この件が片付いたらバージョンアップする予定です)、Windowsです。 ●サンプルで作ったHTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action = "for_pdo_test2.php" method="post"> キーワード:<input type="text" name="keyword"> <input type="submit" name="exec" value="検索"> </form> </body> </html> ●下記がfor_pod_test2.phpです (コメントアウトしている箇所がPDOの動作確認用につくったものです) <?php header("Content-Type:text/html;charset=UTF-8"); error_reporting(4); $keyword=$_POST['keyword']; /* try{ $query="SELECT * FROM book where Name like :name"; $connection=new PDO('mysql:host=localhost;dbname=book_db','root','root'); $stmt=$connection->prepare($query); $stmt->bindValue(":name","'%$keyword%'",PDO::PARAM_STR); $stmt->execute(); while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ print($result['BID']); print($result['Name'].'<br>'); } }catch(PDOException $e){ print('Error:'.$e->getMessage()); die(); } */ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <?php echo "aaa"; ?><br/> <?php echo $keyword; ?> </body> </html> 以上です。 検索をして飛んだ先で aaa ・・・ と表示されてしまいます。 よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
noname#244856
noname#244856
回答No.1

php.iniを編集して display_errors = On error_reporting = E_ALL | E_STRICT にすればすべてのエラーが表示されます。 (再掲) PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 こちらで説明していますが、文字化けの原因はMySQL側の文字セットを指定していないことと思われます。 WindowsでPHP5.3.6以前ならば望ましくないですがやむを得ないので $connection->query('SET NAMES utf8'); を使ってください。

buttero
質問者

補足

ご回答ありがとうございます。 $connection->query('SET NAMES utf8'); を挿入したら表示されるようになりました。 本件は別の環境で秀丸か何かでコードを作成したので、BOMも悪影響をおよぼしていて話をややこしくしていたたようです。 秀丸は大丈夫と思っていましたが、記憶にないですが別のものを使ってしまったかもしれません。 そこで、KanjiTranslatorで変換をいろいろ試してBOMあり状態で文字化けしなくなったり、想定と違う動作をしたので、改めていつもの開発環境で書き直したらキレイに表示されるようになりました。 そこで、改めてコメントアウトをはずし、PODの練習に着手、 $connection->query('SET NAMES utf8'); がとどめになりました。 ところで、php.iniにはもともと display_errors = On error_reporting = E_ALL & ~E_NOTICE となっていて、 後者を error_reporting = E_ALL | E_STRICT と変えてみても変化はなく、何もエラーを表示してくれませんでした。 これはやはりPHPのバージョンによる問題なのでしょうか。もしお分かりでしたらご教授ください。

その他の回答 (1)

noname#244856
noname#244856
回答No.2

php.ini編集後にApacheは再起動されましたか・・・?適用するには再起動が必要です。 display_errors = On error_reporting = E_ALL | E_STRICT はあらゆるバージョンで全てのエラーを表示する設定なので、これで何も表示されなければエラーが起きていないということになります。。

buttero
質問者

お礼

ありがとう御座います。いろいろ試してエラーが表示されることを確認しました。 また、$connection->query('SET NAMES utf8'); をつければきちんと結果が表示され、なければ何も表示されないのに違和感をかんじていましたが、そもそも文字コードの指定がおかしいです、というようなエラーなんかなく、ちゃんと自分で指定しなきゃいけないんだと理解しました。 初歩的ですが大変勉強になりました。

関連するQ&A

  • XHTMLの文字コードのEUC-JPの文字化け

    いつもはHTML4.01で作業をしていて XHTMLはどうも不慣れなせいか 今、外注が作成したHPを修正していて 文字コードをEUC-JPにどうしても変更しなければならないのですが それがうまくいかず、文字化けが発生してます。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> を <?xml version="1.0" encoding="euc-jp"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> このように設定したら文字化けが発生しました。 どのように設定したら文字化けがなくなりますか?

  • XHTML meta属性 文字化け

    XHTMLを勉強しています。 以下のように記述して表示すると タイトルの部分が文字化けします。 何故でしょうか <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>ホームページの作り方</title> <meta name="description" content="初心者のためのホームページテスト" /> <meta name="keywords" content="ホームページ,作成,初心者" /> </head> <body> テスト </body> </html>

    • ベストアンサー
    • HTML
  • 文字化けするページとしないページ(宣言などは同じなんですが・・・)

    はじめまして。 現在、PHPによる更新管理を入れたページを作っています。 なんとか更新、反映はされたのですが、 ページによって文字化けするページとしないページがあります。 宣言?(1行目から<body>までは)はまったく同じなんですが、なぜか文字化けするページとしないページに分かれています。 しかも文字化けする個所としないページは同じテキストの内容です。 にもかかわらず原因不明の文字化けが起きています。 以下、宣言?以下の部分です。 どうかよろしくお願致します。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="imagetoolbar" content="no"> <meta name="Keywords" content="" /> <meta name="Description" content="" /> <meta name="ROBOTS" content="ALL" />

    • ベストアンサー
    • HTML
  • 新規にウィンドウを開いたときに文字化けします。

     お世話様になります。 ただいま、HPを作っているのですが、ウィンドウを開くと、文字化けをします。  但し、右クリックで、エンコードを自動選択にすると解消されるのですが、最初から文字化けせずに表示させる方法は無いものでしょうか。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  このような記述方式をとっております。 他にも同じようなHPを作成しているのですが、他は、この記述で全く問題ないのですが、今現在作っているHPに関してのみ、文字化けした状態でウィンドウが開かれます。  皆様、お忙しい中恐縮ですが、解消する方法をご教示頂ければうれしいです。  宜しくお願い致します。

    • ベストアンサー
    • HTML
  • charsetとフォーム入力文字

    Htmlファイルの先頭が <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ・・・ で始まります。 このファイルのフォームに入力した文字はUTF-8で送られるのでしょうか。 それともOSの文字コードに依存するのでしょうか?

    • ベストアンサー
    • HTML
  • utf-8のページの文字化け

    いろんなサイトを見ている際に時々あるのですがUTF-8のサイトに限り IE(使用しているブラウザはIE6)で文字のエンコードがうまく取得?できず 文字化けの状態でページが表示されています。 表示→エンコード→UTF-8を選択肢更新すると正常に表示されます。 2度目からは正常に表示されるので始めて見たサイトに限られる ようなのですがこれはブラウザが原因でしょうか? (自動選択にチェックはついています) ソースを見ると <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ・・・ となっておりエンコードでUTF-8を選択すると正常に表示される とこを見るとおかしい箇所もないようです。 私の持っているサイトは現在Shift_jisで作っているのですが リニューアルを機にUTF-8で作り直す事を検討中なのですが一部で 文字化けするのでは・・・と迷っております。 これはなにが原因なのでしょうか? 宜しくお願い致します。

  • utf-8 文字化け

    メモ帳でhtmlページを作成してたのですが、日本語を入力してIEで確認したら文字化けになります 原因がわからず困っていました よろしくお願いします IE10 IE 表示 エンコードはutf-8 自動選択にすると日本語表示になります <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ABC</title> <style type="text/css"> </style> </head> <body> <h1>ようこそ</h1> <p></p> </body>

  • ファイヤーフォックスでの文字化け

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta name="keywords" content="" /> <meta name="description" content="" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <link rel="stylesheet" href="css/import.css" type="text/css" /> </head> </head>までの部分をコピーペーストしてみましたが、昨日、<body>~<body>部分で更新をしようと思い、予定情報の終了した分の文字を削除して、ローカルで確認したところ、そのページすべてが文字化けしていました。アップロードしても文字化けはなおりませんでした。 因みに文字コードはUTF-8に設定して(いるつもり?)作成しており、これまでIEもグーグルクロームもファイヤーフォックスもしばらく使ってそのようなことはありませんでしたので、何が原因なのかわかりません。(現在、ファイヤーフォックスです。) 詳しい方教えて下さい!!

    • ベストアンサー
    • HTML
  • PHP 問い合わせフォームの文字化け

    はじめまして。 会員648です。 Websiteを作成し、問い合わせフォームで 入力をHTML、チェック・確認画面、送信をPHPで 作成しました。 初心者なので、サイトでの作成事例をまねております。また文字化けは UTF-8を書けば良い ということも サイトにあったので、とりあえずそうしました。 しかし 他のHTMLは正常に表示しますが、HTMLの入力画面、PHPチェック画面 すべて  文字化けします。 入力画面は <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <form method="post" action="check.php"> ですが 文字化け表示となります。 内容確認画面は check.php で <?php // フォームデータが空の場合は処理終了 if (empty($_POST)) { echo "処理終了"; exit; } // セッションの開始 session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> で始まります。 詳しくPHPを知りませんので、どこが問題なのか 教えていただけませんでしょうか。 なお、テスト環境は 自分のPCで Xampp をインストールして、htdocs 配下に すべての HTML, CSS, image,php を 置いております。 なにとぞ よろしくお願いいたします。

    • 締切済み
    • PHP
  • なぜ文字化けしないのでしょうか?

    Windows Me(shift_jis)とFedoraCore4(utf-8)のPCのブラウザに以下のFedoraCoreのPCに配置してあるgomi.php(utf-8で記載)を表示させて 入力欄に「お元気ですか。」と日本語を入れてもその応答が文字化けしません FC4はutf-8なのでshift_jisのWindows Meでは文字化けするはずですがしませんがどうしてでしょうか? gomi.php -------------------------------------------------------- <?php $in=isset($_POST['in'])?$_POST['in']:'bad'; echo '<?xml version="1.0" encoding="utf-8"?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> <title>test</title> </head><body> <p><?= $in ?></p> <form method="post" action="<?= $_SERVER['PHP_SELF'] ?>"> <input type="text" name="in"/> <input type="submit" value="送信"/> </form> </body></html>

    • ベストアンサー
    • PHP

専門家に質問してみよう