正则表达式转换htmlspecialchars转义后的字符

时间:2016-05-31 02:46:01

标签: php regex htmlspecialchars

我在网站上输入用户输入,并允许通过WYSIWYG编辑器进行格式化。

现在我通过带有ENT_quotes的htmlspecialchars运行我在PHP中获得的整个帖子。

从那里我想运行一个正则表达式将我允许的规则转换回真正的html。

那样

<p>TEXT</p> 

谢谢!

成为

<p>TEXT</p>

有没有办法用正则表达式做到这一点?我并不熟悉它。但基本上寻找转义标签并用真实标签替换它们,同时保持一切在中间?

编辑:我希望正则表达式生成有效的HTML代码。首先,我通过htmlspecialchars运行整个事务以100%安全并获得所有&lt;的实体版本。 &安培; &GT;字符。然后我想要一个正则表达式只转换我想要的标签恢复正常。我不想将所有实体解码回常规,我只想解码我想要的标签。例如,正则表达式搜索&lt;p&gt;TEXT&lt;/p&gt;返回<p>TEXT</p> - 我不想仅重新转换<&>。我想只重新转换我想要的标签。在这个例子中是段落标签。

2 个答案:

答案 0 :(得分:1)

我认为这个正则表达式适用于您所描述的内容:

/&lt;(\/?)(allowed_tags_here_seperated_by_|)&gt;/

正则表达式演示:https://regex101.com/r/uX7cT1/1
PHP演示:https://eval.in/579884

PHP用法:

$allowed_tags = array('p', 'h1');
$regex = '/&lt;(\/?)(' . implode('|', $allowed_tags) . ')&gt;/';
$test_string = '&lt;p&gt;TEXT&lt;/p&gt; This & that don\'t < decode > these though <h2> &lt;h1&gt; &lt;p class=&quot;test&quot;&gt;';
echo preg_replace($regex, '<$1$2>', $test_string);

哦,这也没有考虑到自闭元素。 <br /><hr /><img stuff />

答案 1 :(得分:0)

我认为你需要html_entity_decode()