我正在使用以下内容在code
标记内的任何内容中使用htmlentities:
$content = preg_replace_callback('#\<code\>(.+?)\<\/code\>#s',create_function('$matches','return "<code>".htmlentities($matches[1])."</code>";'),$content);
这样我就可以将它回显到页面上。这非常有效,除非它仅在代码标记正好为<code>
时才有效。如何更新正则表达式,以便它可以使用<code + anything + >
内的内容?
例如:
<code>
<code class="someclass">
<code class="someclass" data-attr="value">
答案 0 :(得分:2)
$content = preg_replace_callback('#(\<code[^>]*\>)(.+)\<\/code\>#s',create_function('$matches','return $matches[1] . htmlentities($matches[2])."</code>";'),$content);
我不明白为什么&lt;和&gt;你的模式正在逃脱,是否有必要?尝试删除那里的转义码:(<code[^>]*>)
它应该可以正常工作。
请注意,\<code[^>]*\>
表示:<code
加上任何不是>
的内容,然后关闭>
作为匹配项。
您现在正在获得两场比赛:(\<code[^>]*\>)
和(.+)
并使用它们来创建结果。
注意(。+?)没有意义,你可能想要:(。*)这意味着0或更多的任何实例,然后模式必须在那之后找到一个结束代码标签。如果输入值中只有一个</code>
可能,这很有效,如果有多个,则会遇到问题,因为模式可能会一直读到最后一个。
这是我使用的版本。 (。*)处理代码标记之间没有任何内容的情况。
$content = preg_replace_callback('#(<code[^>]*>)(.*)</code>#s',create_function('$matches','return $matches[1] . htmlentities($matches[2])."</code>";'),$content);