我需要在字符串的开头和结尾处获得一个没有标签的字符串。我知道strip_tags
但是你知道它会删除所有标签。例如:
<span class="note">
<span></span>This is my text <strong>Hello world</strong>
</span>
在此示例中,我想保留<strong>
标记。重要的是要知道我想要一个无条件的解决方案,因为标签可以是不同的。我已经知道你可以用strip_tags排除标签(这不是我想知道的)但事实并非如此。
有没有人知道这个的快速解决方案,例如reg表达式替换或其他东西(我不擅长的东西)。无法在网上找到这样的东西,这就是我在这里问的原因。
感谢您的贡献。
答案 0 :(得分:3)
DOMDocument对此很方便......
$dom = new DOMDocument;
$dom->loadHTML($html);
$html = '';
foreach($dom->getElementsByTagName('body')->item(0)->firstChild->childNodes as $node) {
$html .= trim($dom->saveHTML($node));
}
echo $html;
如果您无法使用正则表达式,可以使用...
$html = preg_replace('/^\s*<[^>]+>\s*|\s*<\/[^>]+>\s*\z/', '', $html);
请注意,包含>
属性的HTML标记会使正则表达式失败。这就是我更喜欢DOMDocument解决方案的原因。
这两个解决方案都将剥离前导和尾随空白文本节点。如果不合适,请从第一个示例中删除trim()
,从第二个示例中删除\s*
。
答案 1 :(得分:0)
我会使用一个简单的函数,而不是调用DOM类 - 它们运行速度较慢 这就是我通常做的事情:http://codepad.viper-7.com/RVKmAG