0

スペース、一重/二重引用符、改行などのすべてを変換したい.

入力例を次に示します ( som_nangiaに感謝します):

Escape Check < &quot;escape these&quot; > <“and these”&gt; <html><tr><td></td></tr></html> 'these will need escaping too' ‘ so will these’ <script>&nbsp;</script>

私が検討しているオプションは次のとおりです。

<pre>Escape Check < &quot;escape these&quot; > <“and these”&gt; <html><tr><td></td></tr></html> 'these will need escaping too' ‘ so will these’ <script>&nbsp;</script></pre>

/**
 * Encoding html special characters, including nl2br
 * @param string  $original
 * @return string
 */
function encode_html_sp_chars($original) {
    $table = get_html_translation_table(HTML_ENTITIES);
    $table[' '] = '&nbsp;';
    $encoded = strtr($original, $table);
    return nl2br($encoded);
}

htmlspecialcharshtmlentitiesの両方を試しましたが、スペースをエンコードするものはありません。

4

2 に答える 2

5

を使用しhtmlspecialcharsます。

echo htmlspecialchars($string);

あなたの場合、次のように 2 つのパラメーターを渡してください。

echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');

zerkmsPhilに感謝します。

説明

特定の文字は HTML で特別な意味を持ち、その意味を保持する場合は HTML エンティティで表す必要があります。この関数は、これらの変換が行われた文字列を返します。関連付けられた名前付きエンティティを持つすべての入力部分文字列を翻訳する必要がある場合は、代わりに htmlentities() を使用してください。

この関数に渡された入力文字列と最終的なドキュメントが同じ文字セットを共有している場合、この関数は、HTML ドキュメントのほとんどのコンテキストに含める入力を準備するのに十分です。ただし、入力が最終的なドキュメント文字セットでコード化されていない文字を表すことができ、それらの文字を (数値または名前付きエンティティとして) 保持したい場合は、この関数と htmlentities() (名前付きエンティティを持つ部分文字列のみをエンコードする) の両方を使用します。相当)では不十分な場合があります。代わりに mb_encode_numericentity() を使用する必要がある場合があります。

于 2012-11-16T04:48:13.980 に答える
0

この最善の方法はおそらく

例:

function encode_html_sp_chars($original) {
    $encoded = htmlentities($original, ENT_QUOTES, "UTF-8");
    $encoded = str_replace(' ', '&nbsp;', $encoded);
    return nl2br($encoded);
}
于 2012-11-16T07:45:34.583 に答える