1

この質問は私に教えてくれます

htmlentities は、htmlentities() を除いてすべての点で htmlspecialchars() と同じです。HTML 文字エンティティに相当するすべての文字がこれらのエンティティに変換されます。

私が欲しいのは htmlentities のようです。

次に、この質問は、このエラーを取り除くために「UTF-8」引数が必要であることを教えてくれます:

Invalid multibyte sequence in argument

だから、ここに私のエンコーディングラッパー関数があります(異なるPHPバージョン間で動作を正規化するため)

function html_entities ($s)
{
    return htmlentities ($s, ENT_COMPAT /* ENT_HTML401 */, "UTF-8");
}

「引数のマルチバイト シーケンス」エラーが引き続き発生します。

エラーをトリガーするサンプル文字列を次に示します。これは 16 進エンコードです。

ジゲ ア バプティスト

4a 69 67 75 65 20 e0 20 - 42 61 70 74 69 73 74 65

à は 0xe0 としてエンコードされていますが、0x80 を超える単一バイトとしてエンコードされていることに気付きました。

私は何を間違っていますか?

4

2 に答える 2

2

文字列は UTF-8 ではなく ISO-8859-1 でエンコードされています。簡潔でシンプル。

function html_entities ($s)
{
    return htmlentities ($s, ENT_COMPAT /* ENT_HTML401 */, "ISO-8859-1");
                                                           ^^^^^^^^^^^^
}
于 2012-06-28T08:54:17.467 に答える
1

àがエンコードされている場合は0xE0、ファイルを UTF-8 エンコードで保存していません。0xE0は無効な UTF-8 です。そのはず0xC3 0xA0

ファイルを UTF-8 エンコーディングで保存します。また、UTF-8を最後まで参照してください。

utf-8 で正しく保存した場合、16 進数は次のようになります。

4A 69 67 75 65 20 C3 A0 20 42 61 70 64 69 73 74 65
J  i  g  u  e     à        B  a  p  t  i  s  t  e
于 2012-06-28T08:55:54.780 に答える