自定义preg_replace函数的任何更有效的方法?

时间:2013-02-13 13:21:48

标签: php mysql preg-replace security performance

我计划使用下面的自定义函数,同时从我的mysql表中获取数据&将其打印为html。由于htmlspecialchars()将标签转换为html实体,我将它们(p,br,strong)重新转换为标签。

我的问题是:它是否足够有效或是否有其他更短或更有效的方法来实现这一目标?如果您知道,请告诉我至少关键字?我可以在php.net和这个网站上查看详细信息。

谢谢,问候

    function safe_output_from_mysql($safe_echo_to_html)
{
    $safe_echo_to_html = mb_convert_encoding($safe_echo_to_html, 'UTF-8', mb_detect_encoding($safe_echo_to_html));
    $safe_safe_echo_to_html = htmlspecialchars($safe_echo_to_html, ENT_QUOTES, "UTF-8");
    $safe_echo_to_html = preg_replace("&lt;br /&gt;","<br />",$safe_echo_to_html);
    $safe_echo_to_html = preg_replace("&lt;p&gt;","<p>",$safe_echo_to_html);
    $safe_echo_to_html = preg_replace("&lt;/p&gt;","</p>",$safe_echo_to_html);
    $safe_echo_to_html = preg_replace("&lt;strong&gt;","<strong>",$safe_echo_to_html);
    $safe_echo_to_html = preg_replace("&lt;/strong&gt;","</strong>",$safe_echo_to_html);
    return $safe_echo_to_html;
}

3 个答案:

答案 0 :(得分:2)

htmlspecialchars_decode:http://www.php.net/manual/en/function.htmlspecialchars-decode.php

此函数与htmlspecialchars()相反。它将特殊HTML实体转换回字符。

$str = "<p>this -&gt; &quot;</p>\n";

echo htmlspecialchars_decode($str);

以上示例将输出:

<p>this -> "</p>

答案 1 :(得分:2)

请参阅函数htmlspecialchars_decode($ str);功能

答案 2 :(得分:2)

无需多次调用preg_replace()。您可以使用单个模式匹配所有需要的标记:

preg_replace('/&lt;\s*(\/?(?:strong|p|br)\s*\/?)&gt;/i', '<\1>', $s);

当然,我假设您实际上正计划使用正则表达式进行匹配。如果搜索字符串是直接文本,则strtr()更有效。