我需要匹配所有这些开始标记:
<p>
<a href="foo">
Run Code Online (Sandbox Code Playgroud)
但不是这些:
<br />
<hr class="foo" />
Run Code Online (Sandbox Code Playgroud)
我想出了这个,并希望确保我做对了.我只抓住了a-z.
<([a-z]+) *[^/]*?>
Run Code Online (Sandbox Code Playgroud)
我相信它说:
/,然后我有这个权利吗?更重要的是,你怎么看?
我有各种HTML字符串,可以剪切到100个字符(剥离的内容,而不是原始的),无需剥离标记,也不会破坏HTML.
原始HTML字符串(288个字符):
$content = "<div>With a <span class='spanClass'>span over here</span> and a
<div class='divClass'>nested div over <div class='nestedDivClass'>there</div>
</div> and a lot of other nested <strong><em>texts</em> and tags in the air
<span>everywhere</span>, it's a HTML taggy kind of day.</strong></div>";
Run Code Online (Sandbox Code Playgroud)
标准修剪:修剪到100个字符和HTML中断,剥离的内容达到~40个字符:
$content = substr($content, 0, 100)."..."; /* output:
<div>With a <span class='spanClass'>span over here</span> and a
<div class='divClass'>nested div ove... */
Run Code Online (Sandbox Code Playgroud)
剥离的HTML:输出正确的字符数,但显然会丢失格式:
$content = substr(strip_tags($content)), 0, 100)."..."; /* output:
With a span over here and a nested div …Run Code Online (Sandbox Code Playgroud) 我正在DOMDocument使用该loadHTML()函数导入一些任意HTML ,例如:
$html = '<p><a href="test.php">Test</a></p>';
$doc = new DOMDocument;
$doc->loadHTML($html);
Run Code Online (Sandbox Code Playgroud)
然后我想使用DOMDocument我没有问题的方法更改一些属性/节点值.
一旦我做了这些更改,我就想导出HTML字符串(使用->saveHTML()),而不会自动添加到HTML中的<html><body>...标记DOMDocument.
我理解为什么要添加这些(以确保有效的文档),但是我如何才能将我编辑的HTML(特别是<body>标签之间的所有内容)都用到了?
我已阅读这篇文章,虽然它提供了一些解决方案,但我宁愿"正确"这样做,即不在<body>标签上使用字符串替换.HTML的有效性不是问题,因为它预先通过HTML净化器运行.
有任何想法吗?谢谢.
编辑
我知道在PHP 5.3.6中$node添加了参数saveHTML(),不幸的是我坚持使用5.2.