PHP-对标签中的所有内容进行编码<;代码>;

PHP-对标签中的所有内容进行编码<;代码>;,php,html,encode,Php,Html,Encode,我只是想让我的博客尽可能容易地编码。 我的问题是: 如何(如果可能的话)通过htmlentities()对HTML标记中的所有内容进行编码 我想要这个: 如果我写了一篇关于制作东西的帖子,我就不需要在网上用编码器对它进行编码,而只需要制作类似的东西 "Just simply put <code> encoded code </code> and this <b>bold</b> text will be bold, because it isn't

我只是想让我的博客尽可能容易地编码。 我的问题是:

如何(如果可能的话)通过
htmlentities()对HTML标记
中的所有内容进行编码

我想要这个: 如果我写了一篇关于制作东西的帖子,我就不需要在网上用编码器对它进行编码,而只需要制作类似的东西

"Just simply put
<code>
encoded code
</code>
and this <b>bold</b> text will be bold, because it isn't inside <code>
是否可能在php代码中使用类似的函数

encode_tags($text,"<code>","</code>");

您的输入字符串(为澄清我的答案,进行了少量编辑):

注意正则表达式末尾的
s
,用于忽略组
(*)
上的换行符

上面的代码是惰性的(请参见底部的链接),并且也不会匹配不完整的标记(例如没有相应的

第二步:
根据需要对找到的每个子字符串进行HTML更改(您应该熟悉
preg\u match\u all
如何从函数返回数据,请参阅底部的链接):

第三步:
将更改应用于原始值(这些值与步骤2中使用的转换值不同):

输出: 然后,上述内容将输出:

简单地说

编码代码

这个粗体文本将是粗体的,因为它不在代码标记内


您应该熟悉PHP函数系列和常规函数

请阅读,尤其是


干杯

使用HTML解析器并对部分进行选择性编码。@tadman我是选择性编码部分的新手。我不知道怎么做。这就像一个问题。第一步应该是访问并看看有什么工具可以解决这个问题。那里有很多HTML解析器,有些易于使用,有些更灵活,您可以从中选择。重要的是要知道您有哪些选项,因为在PHP世界中通常有很多选项。@tadman您有任何首选解析器吗?我将尝试使用下载最多的一个。但是谢谢你的回答。你不能真正使用HTML解析器来实现这一点:目标是不要将
标记的内容作为HTML使用。(这基本上是一个破碎的输入,处理起来总是一场噩梦,需要很多启发)。@DanB。当然只需将第二个foreach
$code[0]
替换为
$code[1]
。在我的答案旁边加上一点也不错,谢谢
;-)
$string = "Just simply put
<code>
<p>encoded code</p>
</code>
and this <b>bold</b> text will be bold, 
because it isn't inside <code><b>code tags</b></code>";
 preg_match_all("#<code>(.*?)</code>#is", $string, $codes);
$replace = [];
foreach($codes[1] as $key=>$codeBlock ){
    $replace[$key] = htmlentities($codeBlock, ENT_QUOTES, "UTF-8", false);
}
unset($key, $codeBlock);
foreach($codes[0] as $key=>$replacer){
    $string = str_replace($replacer, $replace[$key], $string);
}
unset($key, $replacer, $replace);