将 htmlspecialchars 转义字符转换回正则表达式

Regex to convert htmlspecialchars escaped characters back

我在我的网站上接受用户输入,并允许通过所见即所得的编辑器进行格式化。

现在我 运行 整个 post 我通过 htmlspecialchars 进入 PHP ENT_quotes.

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

所以

<p>TEXT</p> 

谢谢!

变成

<p>TEXT</p>

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

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

我觉得你需要html_entity_decode()

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

/&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, '<>', $test_string);

哦,这还没有考虑自闭因素。 <br /><hr /><img stuff />