0

恐ろしいUTF-8文字エンコードに問題があります。それは私を狂気に駆り立てます、私がそれに近づく方法や私が従うオンラインガイドの数に関係なく、私はそれが望ましい結果を返すことを決して得ることができません。何が起こっているのか:

  • 私のWebサイト全体では、UTF-8でエンコードされた単純なテキストファイルデータベースを使用しており、ラテン語、アラビア語、日本語など、あらゆる種類の特殊文字が正しく表示されます。名前を付けると、1つの例外を除いて、すべて正しく表示されます。

  • ユーザーが自分のWebサイトにある「検索」入力ボックスを使用するときは、$ search = $_REQUEST['search'];を使用します。結果ページで入力データを取得し、それに応じて結果を表示します。ユーザーが検索ボックスに特殊文字を挿入すると、URLに「パーセントエンコード」が含まれます(たとえば、「ï」は「%E3%AF」になります)。実際のWebサイトで$stringを表示すると、特殊文字はすべて�(疑問符付きの黒いひし形)として表示されます。

  • ここhttp://malevolent.com/weblog/archive/2007/03/12/unicode-utf8-php-mysql/で、header()を除いて、すべてを試しました。http-equiv metaを使用してheadセクションで文字セットをUTF-8として設定しましたが、何らかの理由で、header()として設定すると、PHPスタイルシートが機能しなくなります(文字の問題は残ります)。多分これは手がかりですか?

  • urldecodeとrawurldecodeも試しましたが、何も変わりません。

  • 特殊文字はサイトの他の場所で正しく表示されることに注意してください。この問題が発生するのは$search文字列のみです。ちなみに、文字が正しく視覚化されていなくても、検索エンジンは結果をフィルタリングするときに実際に特殊文字を正しく解釈します。これにより、特殊文字が実際に存在し、正しくエンコードされていることがわかりますが、正しい文字セットを使用して正しく視覚化するだけです。ただし...すべてがUTF-8のようです。

正直なところ、私はこれについて非常に混乱しているので、この質問も混乱しているように見えるかもしれませんし、私があなたに提供する情報もあまりよく構成されていないかもしれません。

ありがとうございました!

4

2 に答える 2

2

を変更する機能がないことを確認してください$_REQUEST。一部の関数は、特別なエンコーディングを認識していません。

調査する最良の方法は、変数が変更される前後の変数の状態をチェックすることです。

于 2012-08-26T11:44:51.747 に答える
2

utf-8文字列操作に関してもう1つポイントを追加したいと思います。

utf-8文字列を操作するときは、常にマルチバイト文字列関数を使用してください。

mb_strtolowerの代わりに使用 strtolower()

http://php.net/manual/en/ref.mbstring.php

于 2012-08-26T11:58:10.590 に答える