1

私は何時間も読んでいますが、エンコーディングの問題を完全に理解することはできません。charset=utf-8 を指定して PHP を使用しています。箇条書き • や矢印 ⇒ などの特定の文字をテキストエリアに入力できるようにしたいと考えています。mySQL データベースに直接保存すると、シンボルはそこに正しく保存されます。データベースから保存されたテキストを表示するには、次の関数を呼び出して、保存されているシンボルをテキストエリアに変換します。

function htmlspecialchars2($string, $flags=ENT_NOQUOTES){
$string = htmlspecialchars($string, $flags);    // to help prevent code injection
$string = str_replace(chr(149), "&#8226", $string);  // converts bullet to html
$string = str_replace("⇒", "&#8658",$string);   // don't know the ascii code for the arrow
return $string;
}

これは弾丸には機能しますが、矢には機能しません。拡張 H​​TML 文字を保存 (および再表示) する方法の提案。見つけたものはすべて読みましたが、何かが欠けています。

4

2 に答える 2

2

おそらく探しているのはhtmlentities. これにより、HTML 文字エンティティに相当するすべての文字が HTML エンティティに変換されます (その使用を逆にするためhtml_entity_decode)。


PS:私のシステムでは、htmlentities('⇒', ENT_COMPAT, 'UTF-8')戻ります⇒

于 2013-02-24T00:24:07.847 に答える
1

従う人にとって、解決策には2つの部分がありました

1) One Trick Pony が述べたように htmlentities が必要でした (ありがとう!)、それが本当の答えでした。

2) ただし、残りの半分は、セッションのエンコーディングを明示的に設定する必要がありました。mysqli_set_charset($link, "utf8");

注: 新しいコードははるかに単純です。上記のように特別な関数 htmlspecialchars2() を呼び出す代わりに、単純に htmlentities($string, ENT_NOQUOTES, 'UTF-8') を呼び出すことができます。

于 2013-02-24T02:02:57.020 に答える