使用PHP将特殊字符转换为相应的HTML代码的最佳方法是什么?

时间:2012-11-16 04:46:38

标签: php html

我想转换所有内容,例如空格,单/双引号,换行符等。

以下是一个示例输入(感谢som_nangia):

Escape Check < &quot;escape these&quot; > <“and these”> <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”> <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,但没有一个编码空格。

2 个答案:

答案 0 :(得分:5)

使用htmlspecialchars

echo htmlspecialchars($string);

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

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

感谢zerkmsPhil

解释

  

某些字符在HTML中具有特殊意义,如果要保留其含义,则应由HTML实体表示。此函数返回一个包含这些转换的字符串。如果您需要翻译具有关联命名实体的所有输入子字符串,请改用htmlentities()。

     

如果传递给此函数的输入字符串与最终文档共享相同的字符集,则此函数足以准备输入以包含在HTML文档的大多数上下文中。但是,如果输入可以表示未在最终文档字符集中编码的字符,并且您希望保留这些字符(作为数字或命名实体),则此函数和htmlentities()(仅编码具有命名实体的子字符串)等价物)可能不足。您可能必须改为使用mb_encode_numericentity()。

答案 1 :(得分:0)

这种最好的方式可能是

实施例:

function encode_html_sp_chars($original) {
    $encoded = htmlentities($original, ENT_QUOTES, "UTF-8");
    $encoded = str_replace(' ', '&nbsp;', $encoded);
    return nl2br($encoded);
}