文字化けの原因と解決方法

このQ&Aのポイント
  • サイトのリニューアル後に文字化けする問題があります。旧サイトはsjisで、新サイトはutf-8で保存されています。metaでutf-8を指定し、サーバーのdefault_charsetもutf-8です。しかし、最初のアクセス時に文字化けが起こることがあります。文字化けはキャッシュの問題かブラウザの問題かは明確ではありませんが、エンコードから正しい文字コードを指定することで解消できます。
  • 他のサイトを見ていると、たまに文字化けしているサイトがあります。エンコードから正しい文字コードを指定すると正しく表示される場合もあります。修正方法を知っている人は問題ありませんが、知らない人が訪れた場合にはただの文字化けしたサイトとなってしまいます。エンコードから正しい文字コードを指定することで、文字化けは解消されます。
  • 文字化けの原因はリニューアル後のサイトの文字コード設定が適切でないことが考えられます。metaでutf-8を指定し、ファイルもutf-8で保存していますが、最初のアクセス時に文字化けが起こることがあります。エンコードから正しい文字コードを指定する方法を知りたいです。エンコードから正しい文字コードを指定することで、文字化けは解消されます。
回答を見る
  • ベストアンサー

一時的な文字化けについて

サイトのリニューアルを行いました。 ・旧サイト → sjis (静的なhtml) ・新サイト → utf-8 (WordPress) 新サイトのmetaでutf-8を指定しファイルもutf-8で保存しているのですが、リニューアル後の最初のアクセス時に文字化けする場合があります。 サーバーのdefault_charsetもutf-8です。 ブラウザ上で右クリックしてエンコードからutf-8を選択するとそれ以降は全く文字化けしないのですが、これは旧サイトのキャッシュの問題なのでしょうか? 今回のリニューアルに限らず、いろんなサイトを見ているとたまに文字化けしているサイトがあり、エンコードから指定すると正しく表示される場合もいくつかあります。 修正する方法を知っている人であればいいのですが、知らない人がサイトに訪れた場合、ただの文字化けしているサイトです。 エンコードから正しい文字コードを指定すればそれ以降は文字化けしないので、キャッシュなのかブラウザの問題なのか明確な答えはわからないのですが、確実に正しいエンコードで表示させることってできるのでしょうか? 可能であれば方法を教えてください。

  • dcx147
  • お礼率33% (214/636)
  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

//雑談レベルですが ヘッダーでエンコーディング指定はされていますか? Content-Type: text/html; charset=utf-8 私はいつもIE使わないので出くわしたことがないですが、 ヘッダー、META共に指定があっても一時的に文字化けすることもあるみたいですね。 IEの日本語(自動選択)にはUTF-8が含まれていないので誤判定しているのかな?と思いますが、 UTF-8であることが分かる特定の文字列を<HEAD>とかに埋め込んでおくっていう 原子的な方法がどの程度通用するのかな・・・と思ったりします。

dcx147
質問者

お礼

お返事ありがとうございます。 >ヘッダーでエンコーディング指定はされていますか? wpでヘッダーで文字コードを個別に設定したことはないですし、サーバーのデフォルトもutf-8なのでmetaのみの指定です。 文字化けの経緯として、新サイト(wpのutf-8)をアップする前に旧サイト(sjis)をIE9で表示していました。 wpの必要なファイルをアップし、旧サイトを開いている状態でF5を何度押してもwpのインストール画面に切り替わらなかった記憶があります。 そこで、クロームで同じURLにアクセスしたところ正常にインストール画面が表示されクロームでインストールを行い新サイトを確認すると文字化けなしで表示されホッとしていたところIE9を再起動させて表示すると最初だけ文字化けしてしまいました。 IE9で正しいエンコードを指定すると以降は文字化けしないですし、クロームやFireFoxではキャッシュを消してリロードしても文字化けしません。 IEのみ起こる問題のようなので察するにキャッシュかブラウザの誤作動が原因というのが濃厚かと思っておりますが・・・

その他の回答 (1)

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

metaの指定はしていますか?

dcx147
質問者

お礼

追記です。 firefoxでサイトを開くと文字化けなしで開きます。その後にキャッシュなどを全て削除してブラウザを再起動させてサイトを開くと文字化けなしで開きます。 最初にサイトを見た際に文字化けしたブラウザは、IE9だったと思います。

dcx147
質問者

補足

お返事ありがとうございます。 具体的には <!DOCTYPE html> <html dir="ltr" lang="ja"> <head> <meta charset="UTF-8"> のようにしています。 wpは基本phpなので、php.iniで文字コードをutf-8に指定する方法もあるとは思いますが、サーバーもデフォルトでutf-8ですし、正しいエンコードを指定すると次回から文字化けはなくなります。 ・旧サイトがsjisだったからキャッシュでエンコードをsjisで読み込んでしまう ・wp(php)の設定の問題 どちらかの理由に落ち着くとは思うのですが、原因がわからないので答えがみつからず謎です。。。

関連するQ&A

  • テキストエディターの文字化け

    素人の者です。 これまで、PHPのプログラムの書き込みをSJISで行ってきましたが、どうもネット上を調べているうちにSJISはあまり使わないほうが良いようなことが書いてあったので、UTF-8で書くことにしようと思いました。そして、UTF-8で書いていてWEB上は特に問題なく文字化けもせず表示されるのですが、テキストエディターで再度ファイルを開くと、テキストエディター内で文字化けしていることがあります。メモ帳で開くときはファイルの文字コートをUTF-8に指定すれば文字化けしません。サクラエディターで開けば、何もしなくても文字化けしません。php_editor_stdで開けば、文字化けします。ez-HTMLで開けば、文字化けします。???とこんな具合です。テキストエディターを開くときにエンコードを指定して開けば、文字化けはしないであろうと考えて、設定の部分を色々と探していじってみても、文字化けの現象は変わりません。SJISですと、ダメ文字とかあるのでやはり切り替えていったほうが良いと思い試している最中です。テキストエディターで文字化けした場合、どのようにすれば解消するのかお分かりになる方がおりました教えていただけないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの文字化けについて教えてください。

    文字を表示しようとすると、 縺ョ螂ウ蟄 このような文字化けが起こるので $a =mb_convert_variables('utf-8' , 'sjis' , $item[0]); echo $a こうしてエンコードしたのですが、結果をみると SJIS とだけしか表示されません。どこか間違えているのでしょうか? CSSも使っているのですが、そちらも何か関係しているのでしょうか?

    • 締切済み
    • PHP
  • 文字化けが解決できません。お願いします

    文字化けが解決できません 使用データベースはSQLServer2008です 対象カラムはcharです データベースの照合順序はJapanese_CI_ASです ブラウザのエンコードをUTF-8にするとprint_r($row);の部分は文字化けせずに表示 されますprint("砂糖");は文字化けします ブラウザの標準文字コード??SJISだとprint_r($row);文字化けします print("砂糖");は文字化けしません ということはSQLServerのデータの文字コードがUTF-8ということなのでしょうか SJISだと思うのですが。 そこで、SQLServerがUTF-8だと仮定してprint_r(mb_convert_encoding($row, "SJIS","UTF-8")); というプログラムを書いたのですが結果は同じでブラウザのエンコードをSJISにすると 文字化けしていまいます どうすればブラウザのエンコードがSJISで文字化けしないようになるのでしょうか 教えてください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift-SJIS"> <title>test</title> </head> <body> <?php try{ $dsn ='sqlsrv:server=.\sqlexpress;database=sample'; $dbname = "sample"; $user = "sa"; $password ="manager"; //$dbh = new PDO("mssql:host=.\\SQLEXPRESS;dbname=sample",$user,$password); $dbh = new PDO($dsn,$user,$password); $stmt = $dbh->prepare("select * from shohin"); $stmt->execute(); while($row = $stmt->fetch()){ //print_r($row); //print_r(mb_convert_encoding($row, "SJIS","UTF-8")); print_r($row); } unset($dbh); unset($stmt); // foreach($dbh -> query($sql) as $row) // print($row["id"]); // print($row["name"]); // echo "接続できました"; // } // $dbh = null; print("砂糖"); }catch(PDOException $e){ print("Failed to get DB handle:aaakkka".$e->getMessage()."\n"); phpinfo(); exit(); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 文字化けしてしまいます。

    ~の文字が文字化けして、どうしても解決ができません。 どなたかお分かりになる方、アドバイスをよろしくお願いいたします。 PHP5、Xampp、XP の開発環境になります。 実は出勤時間をPCからと携帯からの両方で管理しようと思っています。 データ保存用ファイルは、utf-8のtxtファイルになります。 すべてをutf-8のファイルで作ることができれば、問題は起きてこないわけですが、携帯が かかわってきており、sjisを使わざるを得ません。かといって、すべてのファイルをSJISにするのも これまた、ダメ文字の関係でそれもできません。 そこで、携帯だけはsjisファイルで作っています。このsjisファイルとutf-8ファイルの間で文字化けが おきてしまいます。 出勤時間を読み込んで、10:00~のようにutfの保存用ファイルから読み込んで、mb_convert_encoding でsjisに変換して表示をします。これは、普通に表示になります。 表示されたファイルは携帯のsjisファイルですので、携帯から出勤時間を変更して保存しようとする 場合、今度はsjisからutf-8に変更して保存する必要があります。 そこで、携帯からutf-8の保存用ファイルに更新した内容を保存する場合にmb_convert_encodingを かけて、utf-8に変換しました。一応、mb_detect_encodingを使ってutf-8に変更されていることも 確かめました。 しかし、保存さているデータは、10:00縲 というように~が縲に文字化けしてしまいます。 この文字化けを回避する方法がお分かりの方、ぜひお知恵をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 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で作り直す事を検討中なのですが一部で 文字化けするのでは・・・と迷っております。 これはなにが原因なのでしょうか? 宜しくお願い致します。

  • HTMLでどうしても文字化け(エンコード指定がなぜか反映されない)

    HTMLでどうしても文字化け(エンコード指定がなぜか反映されない) こんにちわ、私が所属しているところは例年活動の発表ページを作成して、今年は私が作成担当になっています。 去年先輩が作ったものを参考に作っているのですがサーバに上げて見たところエンコードがおかしいのかどうしても文字化けしてしまいます。 以下に詳しい症状を箇条書きします。どなたか知恵を貸してくださる方、よろしくお願いします。 自スペック:WindowsVista:FireFox3.6.9 サーバの設定:エンコードはutf-8で統一されている(去年のページもすべてutf-8でした) 症状:去年と同様にcssでもhtmlでもutf-8を文字エンコードに指定しているが文字化け、ブラウザのエンコードをshift_jisに変えると直る ↓ 指定エンコードをshift_jisに変えてみるがなぜかutf-8で表示される ↓ ソースをterapadでutf-8に変換してみてからソースを上げなおしてみる ↓ やっぱりエンコードをshift_jisに変えないと文字化けが直らない 去年のページではutf-8で問題なく表示されており、指定コードの周辺は変えていないのでなぜ文字化けするかが不明です。 日本語のエンコードは普通shift_jisであってutf-8ではないですよね? 去年のページがなぜutf-8でも普通に表示されているのか、それがなぜほとんど同じ構成の自分が作ったページではできないのか、知恵をお貸しください。

    • ベストアンサー
    • HTML
  • Cygwinで日本語化け(UTF-8)

    web上の情報を元にnkfとmoconv.shを入れてShift-JISエンコードの日本語が文字化けしなくなったんですが、UTF-8エンコードのファイルが依然文字化けします。 テストするためにsjis.htmlとuft8.htmlを作って、↓な感じでやってます。 >export LANG=ja_JP.SJIS >cat sjis.html 日本語がちゃんと表示されます。 >export LANG=ja_JP.UTF-8 >cat utf8.html 文字化け どなたかご存知でしたら教えてください。

  • CakePHPでDBに入れる際文字化け

    お世話になります。 現在CakePHPで携帯サイトを作成しているのですが、 通常出力は問題ないのですが、 フォームからDBに入れる際に文字化けが起こります。 ■現在行っている設定 charset=SJIS ファイルの文字コード:SJIS CakePHPのdatabese.phpのエンコード設定:SJIS MySQL の文字セット: UTF-8 Unicode (utf8) ご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • 見るパソコンによって文字化けする

    自分のHPを持っています。 構成は縦の2分割フレームで、基本文字コードは日本語SHIFT-JISです。 これを、片フレームの文字コードがUnicode(UTF-8)になると、見るPCによってちゃんと見えたり、文字化けして見えたりします。 文字化けした時には、手動にて当該フレーム上でUTF-8にエンコード指定してやるとちゃんと表示されます。 ブラウザはIE7 for WinXP SP2でエンコードの設定はどのパソコンも同じになっています。 UTF-8の方のソースには 『<META http-equiv="Content-type" content="text/html; charset=UTF-8" />』 を入れてやってますが状況は先に述べた通りです。 フレームに表示させず、普通に一枚で表示させるとちゃんと表示されます。フレームの時のみ状況がまちまちのようです。 どのパソコンで見ても適切なエンコードが選ばれるようにするにはどうすればいいのでしょうか? ちなみに、UTF-8のソースは、GoogleMapsをHTML化した物です。

  • csvデータの文字化けについて

    こんにちは。 駅データ http://www.ekidata.jp ↑こちらのサイトの駅のデータをダウンロードしたいのですが、chromeで開くとcsv形式となってしまい、文字化けします。 文字コード:utf-8 というデータなのですが、どうすれば文字化けせずダウンロードできるのか分かりません。エンコードの変更も表示されません。 スマホでアクセスした際はブラウザで綺麗に見られました。 どうすればパソコンで表示できるのでしょうか。最終的にはエクセルに直すのが目的です。 どなたかご教示願います(>_<)

専門家に質問してみよう