我需要做的是用代码标签替换所有预标签。
实施例
<pre lang="php">
echo "test";
</pre>
Becomes
<code>
echo "test";
</code>
<pre lang="html4strict">
<div id="test">Hello</div>
</pre>
Becomes
<code>
<div id="test">Hello</div>
</code>
等等..
由于里面有希腊文字,php的默认DOM函数存在很多问题
我认为Simple HTML DOM Parser是我需要的,但我无法弄清楚如何做我想要的。
有什么想法吗?
更新
我移动到一个新的CMS,这就是为什么我写入一个脚本,以便在插入数据库之前将所有帖子格式化为正确的格式。我不能在新的CMS中使用pre标签。
答案 0 :(得分:2)
为什么不KISS(保持简单,愚蠢):
echo str_replace(
array('<pre>', '</pre>'),
array('<code>', '</code>'),
$your_html_with_pre_tags
);
答案 1 :(得分:2)
查看manual。将<pre>
代码更改为<code>
应该非常简单:
$str = '<pre lang="php">
echo "test";
</pre>
<pre lang="html4strict">
<div id="test">Hello</div>
</pre>';
require_once("simplehtmldom/simple_html_dom.php");
$html = str_get_html($str);
foreach($html->find("pre") as $pre) {
$pre->tag = "code";
$pre->lang = null; // remove lang attribute?
}
echo $html->outertext;
// <code>
// echo "test";
// </code>
// <code>
// <div id="test">Hello</div>
// </code>
PS:您应该对输入中的"
,<
和>
字符进行编码。
答案 2 :(得分:0)
如果元素中有pre
之类的任何块级元素,只需用code
标记替换div
标记就会更改含义和渲染,并使标记无效。所以你需要修改你的目标。看看你是否可以继续使用pre
。如果没有,请改为使用<div class=pre>
以及在渲染时使其行为类似pre
的样式表。当您使用pre
标记替换div
代码时,您将不会创建语法错误(div
的内容模型允许pre
允许的任何内容,以及更多内容。< / p>
关于lang
属性,lang="php"
不正确(根据HTML规范,lang
属性使用标准语言代码指定内容的人类语言)但是编码计算机语言信息的想法很好。它可能有助于以后的样式和脚本。 HTML5草案提到可以使用以language-
开头的类名来编码此类信息,例如class="language-php"' (or, when combined with another class name,
class =“language-php pre”'。