文字エンコーディングは MAMP サーバーでは機能するようですが、WAMP サーバーでは機能しないようです
-
23-08-2019 - |
質問
私は、複数の言語でタグと検索クエリを受け入れることができる Web アプリケーションに取り組んでいます。それはあまり多くを求めすぎませんね?
現在、私の開発用 MAMP サーバーではすべてが素晴らしい状態になっています。多言語タグを追加したり、必要な言語で検索したりできます。
一方、本番環境の WAMP サーバーでは、多言語文字が問題を引き起こします。そして、常にではなく、時々、または一部のキャラクターだけですが、まだわかりません。
何が起こるかというと、余分な文字が取得され、URL デコードが適切に行われなくなります。
どちらの環境でも PHP 5、MySQL、および Apache を使用します。
どこかで設定を間違えたのではないかと思います。
何か案は?
アップデート:今ではそれが特定の文字であると確信しています(たとえば、ヘブライ語のל、מ א)。
アップデート:簡単に再現可能:常に同じ文字は間違ったエンコードになります。
- コンテンツタイプは
text/html; charset=utf-8
また、もう少し詳しく特定しました。
検索文字列を使用します。 ליבני
結果ページには次のように表示されます。
- アドレス バーの検索フレーズは正しく、適切に URL エンコードされています。
- HTML 自体に「」という文字列が表示されます。�_יבני「それは」
%D7_%D7%99%D7%91%D7%A0%D7%99
」という意味です ל にエンコードされています%D7_
" の代わりに "%D7%9C
」 そうあるべきです。
さらにどこへ行けばいいのかわかりません。
何か案は?誰でも?
解決 3
これは、問題はPHPの場合でもparse_url内のどこかで判明()。 私はいくつかのバージョンでは、いくつかのプラットフォーム上で、でもparse_url()が正しくUTF文字を処理しないことを推測します。これは、Windows 少なくとも一つのより多くの時間の上でスポットしました。
私は今のところ、それを回避することができました。
みんなの時間と注意をありがとう、 オマールます。
他のヒント
Charset は単純な概念を集めたものです。混乱を招くのは、正しく実行する必要がある複数のレベルがあることです。ある場所を間違えると、通常はまったく別の場所に現れます。
したがって、あなたの問題に対する少し見下したような、しかし非常に真実な答えは、問題がないようになるまで棒で突くだけではなく、自分が何をしているのかを知る必要があるということです。
次の読書をお勧めします。
内部および外部エンコードには UTF-8 を使用することをお勧めします。使用 AddDefaultCharset
指令 Apache にデフォルトのエンコーディングを指示するには:
AddDefaultCharset utf-8
ここで必要なのは、アプリケーションがデータを正しく処理していることを確認することだけです (「 default_charset
指令)。出力に UTF-8 を使用する場合、クライアントはこれを以降のリクエスト (URL、フォーム データ) にも使用する必要があります。