1

latin1 から utf8 に変更しました。あらゆる種類のテキストが正常に表示されていましたが、英語以外の文字が奇妙な記号としてデータベースに保存されていることに気付きました。私はそれを修正するために1日を費やしましたが、最終的には英語以外の文字がデータベースで英語以外の文字として表示され、ブラウザでも同じように表示されます. 'ただし、アポストロフィが として保存され、感嘆符がとして保存されていることに気付きました!。これは正常ですか、それとも ' および ! 代わりにデータベースに?もしそうなら、それを修正するために何をする必要がありますか?

4

2 に答える 2

0

&#XX;フォームはHTML 文字エンティティであり、データベースに保存されている値を PHPhtmlspecialcharshtmlentities. 値が HTML ドキュメント内で処理される場合 (または、その一部であるかに関係なく、おそらく任意の HTML プロセッサによって処理される場合) は、正常に表示されるはずです。それ以外では、彼らはそうしません。

これはおそらく、それらを HTML エンティティとしてエンコードしたままにしたくないことを意味します。値をエンコードするために使用した関数 (例: ) に対応するものを使用して、値を元に戻すことができます。この関数は、変換先のhtml_entity_decodeエンコードに関する引数を取る必要があります。それが完了したら、以前に問題があったエントリのいくつかをチェックし、それらを表示するために正しいエンコーディングを使用していることを確認してください。

それでも問題が解決しない場合は、格納された値が使用するはずのエンコーディングと、実際に使用されているエンコーディングが一致していません。彼らが実際に使用しているものを把握し、DBからそれらを引き出して変換し、それらを再挿入する前にターゲットエンコーディングに変換するか、実際に使用するエンコーディングで再挿入する必要があります. 後者のオプションと同様に、列をBLOBs に変換し、次に列の文字セットを変更し、次に列の型をテキスト型に戻してから、列を目的の文字エンコーディングに直接変換します。この扱いにくいシーケンスの理由は、文字エンコーディングを変更するとテキスト型は変換されますが、バイナリ型は変換されないためです。

一般的な文字エンコーディングの詳細については、 「すべてのソフトウェア開発者が絶対に、積極的に Unicode と文字セットについて知っておくべき絶対最小値 (言い訳はありません!) 」をお読みください。また、 § 9.1.4. MySQLでエンコーディングがどのように使用されるかについては、MySQL マニュアルの「Connection Character Sets and Collat​​ions」を参照してください。

于 2010-05-09T09:41:39.300 に答える
0

それは、データベースの内容をどうしようとしているかによって異なります。不変条件が「データベースのコンテンツはサニタイズされており、それ以上の検証/サニタイズなしで Web ページに直接配置される可能性がある」ということである場合、& およびデータベース内の他の html エンティティは完全に理にかなっています。一方、データベースが生の元のデータのみを保存し、それを処理/サニタイズしてから HTML コードで表示する場合は、これらのエンティティを UTF でエンコードされた元の文字に置き換える必要があります。 -8. したがって、データベースの内容をどのように解釈するかによって異なります。

于 2010-05-09T06:40:04.440 に答える