1

MySQL データベースはutf8エンコードされたテキストを返します。基本的に、PDO属性を使用MYSQL_ATTR_INIT_COMMANDして渡しました:

SET CHARACTER SET utf8

utf8エンコードされたテキストを返します。ただし、データベース内の一部のテキストはプレーンutf8であり、そのような&alum;ものはそのまま返されます。

したがって、実際の文字utf8_encodeを取得するには、php で再度呼び出す必要があります。utf8その正常に動作します。

テキストを2回エンコードすることで悪影響が生じるか、上記のようにエンコードされていないテキストをエンコードする以外に影響がないかどうかを知りたいですか?

ありがとう!

編集:

次のコードを使用して正しい文字を取得しています。

 $val = utf8_encode(addslashes(html_entity_decode(strip_tags($val))));

したがって、次のテキストを次のテキストから変換します。

<font color=\"#222222\" face=\"arial, sans-serif\" size=\"2\"> Test Event  &nbsp; &nbsp;</font><span style=\"color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px;\">Pers&ouml;nlichkeit Universit&auml;t&quot;</span>

(このテキストは、 を呼び出した後、データベースから取得されますSET CHARACTER SET utf8)

に:

Test Event Persönlichkeit Universität\"
4

1 に答える 1

2

&auml;そもそもデータベースに到達するべきではない html エンティティです。UTF-8とは関係ありません。

エンコーディングは ISO-8859-1 と UTF-8 で同じであるため、呼び出しutf8_encodeても何も起こりません。"&auml;"html として解釈されるため、ブラウザで表す文字が表示されます。

通常の Web アプリ開発者として、 を呼び出すべきではありませんutf8_encode。ISO-8859-1 から UTF-8 への変換は実際には必要ありません。まず、ブラウザーと MySQL がサポートしていないためです。互換性のために、Latin1 と ISO-8859-1 を Windows-1252 にエイリアスします。次に、ブラウザーとデータベースがデータを UTF-8 で送信するように設定できるため、データはすでに UTF-8 であり、変換は必要ありません。

UTF-8 はすべての文字を表すことができるため、HTML エンティティにも変換しないでください。

データベース内のデータは、html について何の懸念も持つべきではありません。そこにあるデータは、データの正規の信頼できるそのままの表現でなければなりません。現在、データが実際に文字通り意図されたものなのか、それとも次のような問題を引き起こすのか、混乱があり&auml;ますä

ここに画像の説明を入力

TheDailyWTFからの画像

于 2013-04-18T16:39:35.660 に答える