我正在使用PHP编写一个博客网络应用程序,我希望博客能够向观众展示一些代码片段
我使用markdown文件向博客发布新文章,因此在从markdown转换为HTML后,结果看起来应该是这样的
<h3>This is sample HTML Coding</h3>
<pre><code>
<html>
<body>
Hello World
</body>
</html>
</code></pre>
<h3>This is another sample HTML Coding</h3>
<pre><code>
<html>
<body>
Another Hello World
</body>
</html>
</code></pre>
我不能简单地使用像htmlspecialchars()
这样的PHP函数,因为我需要那些例如要呈现的标题和代码块。实际上我只需要转换之间的所有特殊字符 <code></code>
现在我唯一能想到的就是使用RegEx,我提出了两种方向选择,我认为这可能是可能的。
仅在<
之间匹配所有>
,</
,<code></code>
,并在特殊字符上使用preg_replace()
每一个。
匹配每个<code></code>
之间的所有字符(因为我会在每篇文章中包含多个代码块),然后将preg_replace()
与htmlspecialchars()
请告知
P.S。
我将来自markdown的HTML结果放在regex101.com我尝试了一些RegEx,例如选择1 (?<=<code>)[<](?=<\/code>)/g
,选择2 (?<=<code>)[\s\S]*(?=<\/code>)/g
,但它们都不起作用。
被修改
这是我希望的预期结果。
<h3>This is sample HTML Coding</h3>
<pre><code>
<html>
<body>
Hello World
</body>
</html>
</code></pre>
<h3>This is another sample HTML Coding</h3>
<pre><code>
<html>
<body>
Another Hello World
</body>
</html>
</code></pre>
答案 0 :(得分:3)
我不清楚为什么你想要这样做,但你应该在这里使用回调函数:
$html = preg_replace_callback('~(?<=<code>).*?(?=</code>)~s',
function($m) {
return htmlentities($m[0]);
}, $html);
答案 1 :(得分:1)
答案 2 :(得分:0)
你在Markdown写你的帖子,对吗? Markdown支持code blocks。使用它们。
如果要包含代码段,请将其缩进四个空格 - 就像在StackOverflow上一样 - 并且Markdown将生成<code>
元素并自动转义其中的任何尖括号和&符号。您不必对自己进行任何后处理,以确定HTML的哪一部分属于代码段,因为Markdown已经知道了。
基本上,就像你在上面的问题中编写HTML一样。这是Markdown。