web-dev-qa-db-ja.com

UTF-8でエンコードされたhtmlページには、文字の代わりに�(疑問符)が表示されます

Win7(x64)に標準のXAMPPをインストールしています。 mysqlエンコーディングがphpエンコーディングと一致しない過去のプロジェクトでエンコーディングの問題を共有していたため、時には他のエンコーディングでhtmlを出力していたため、utf-8を使用してすべてを一貫してエンコードすることにしました。

私はちょうどhtmlマークアップを始めたばかりで、すでに問題が発生しています。

  • ページはutf-8を使用して保存されます(BOMなし、I think
    // update:これは事実ではないことが判明しました。ファイルは実際に_ISO_8859-1_で保存されました。私は後でSherm Pendleysの回答のおかげでこれを見つけました。戻ってプロジェクト設定(「ISO-8859-1」に設定されていた)を目的の「UTF-8」に変更する必要がありました。
  • phpは.htaccessごとに設定され、utf-8の.phpページを次のように提供します。_AddCharset UTF-8 .php_
  • htmlには、_<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />_を指定するメタタグがあります
  • テストするには、使用するphp header('Content-Type:text/html; charset=UTF-8');を設定します

ページは明らかにutf-8で提供されています(firefoxとchromeはそのように認識します)が、_é_、_á_または_¡_などの特殊文字__と表示されるだけでなく、ソースコードを表示するときにも表示されます。

上記のエンコード設定をドロップすると、すべての文字が正しくレンダリングされますが、検出されたエンコードには、ブラウザーに応じて_windows-1252_または_ISO-8859-1_のいずれかが表示されます。

どうして?私はとても困惑しています。私はまったく逆の動作を期待していたでしょう。
どんなアドバイスでも大歓迎です、ありがとう!

編集:これがもう少し役立つことを願っています。これは応答ヘッダーです(firebugによる)

_HTTP/1.1 200 OK
Date: Sat, 26 Mar 2011 20:49:44 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_Perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Content-Length: 91
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
_
32
leugim

上記のエンコーディング設定を[ドロップ]すると、すべての文字が正しく[レンダリング]されますが、検出されたエンコーディングには、ブラウザに応じてwindows-1252またはISO-8859-1が表示されます。

それはあなたが本当に送信しているものです。箇条書きリストのエンコード設定はどれも実際に出力を変更しません。送信する内容を解釈するときに、どのエンコードを想定するかをブラウザに伝えるだけです。それがあなたがそれらを手に入れている理由です-あなたはあなたが送信しているものがUTF-8であることをブラウザに伝えていますが、それは本当にISO-8859-1です。

22
Sherm Pendley

私の場合、ブラウザがlatin1を期待しているときに、データベースはutf8を返しました。

したがって、MySQLiの場合:

 mysqli_set_charset($dblink, "utf8");    

詳細については、 http://php.net/manual/en/mysqli.set-charset.php を参照してください

13
Dennis

.phpいくつかのテキストを印刷するファイルは、utf-8

6
IProblemFactory

最初にPDOにcharsetを伝えます。

PDO("mysql:Host=$Host;dbname=$DB_name;charset=utf8;", $username, $password);

次のことに注意してください:charset=utf8;パート。

それが役に立てば幸い!

5
ErickBest

私はブラジル出身で、latin1_spanish_ciを使用してデータベースを作成しています。 htmlおよび私が使用する他のすべてについて:

charset=ISO-8859-1

データはéãおよびçでうまくいきます...時々、次のようなコードを使用してhtmlのテキストを配置する必要があります。

Ol&aacute;

私にくれます

Olá

このページでコードを見つけることができます: http://www.ascii.cl/htmlcodes.htm

お役に立てれば。本当に迷惑だったのを覚えています。

2
SPL_Splinter

誰も言及されていないようです

SET NAMES utf8;

私はこの解決策を見つけました here そしてそれは私を助けました。適用方法:

すべてUTF-8にするには、データベースサーバーに接続した直後に次のステートメントを発行します。SET NAMES utf8;

たぶんこれは誰かを助けるでしょう。

2
Vitalius

問題は、ページを提供するためにApacheによって使用されている文字セットです。私はLinuxを使っているので、XAMPPについては何も知りません。私も同じ問題を抱えていました。問題を解決するためにしたことは、charset構成ファイルに文字セットを追加することでした(デフォルトでコメント化されています)。

私の場合、/etc/Apache2/conf.d/charsetただし、Windowsを使用しているため、場所が異なります。だから私はあなたにこれを解決方法のアイデアのように与えています。

最後に、私の文字セット設定ファイルは次のようになります。

# Read the documentation before enabling AddDefaultCharset.
# In general, it is only a good idea if you know that all your files
# have this encoding. It will override any encoding given in the files
# in meta http-equiv or xml encoding tags.

AddDefaultCharset UTF-8

役に立てば幸いです。

1
EmCo