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);

在您的情况下,请以这种方式传递两个参数:

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 回答