使用PHP从字符串的开头和结尾删除标签

时间:2012-02-12 23:24:58

标签: php string tags

我需要在字符串的开头和结尾处获得一个没有标签的字符串。我知道strip_tags但是你知道它会删除所有标签。例如:

<span class="note">
  <span></span>This is my text <strong>Hello world</strong> 
</span>

在此示例中,我想保留<strong>标记。重要的是要知道我想要一个无条件的解决方案,因为标签可以是不同的。我已经知道你可以用strip_tags排除标签(这不是我想知道的)但事实并非如此。

有没有人知道这个的快速解决方案,例如reg表达式替换或其他东西(我不擅长的东西)。无法在网上找到这样的东西,这就是我在这里问的原因。

感谢您的贡献。

2 个答案:

答案 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;

CodePad

如果您无法使用正则表达式,可以使用...

$html = preg_replace('/^\s*<[^>]+>\s*|\s*<\/[^>]+>\s*\z/', '', $html);

CodePad

请注意,包含>属性的HTML标记会使正则表达式失败。这就是我更喜欢DOMDocument解决方案的原因。

这两个解决方案都将剥离前导和尾随空白文本节点。如果不合适,请从第一个示例中删除trim(),从第二个示例中删除\s*

答案 1 :(得分:0)

我会使用一个简单的函数,而不是调用DOM类 - 它们运行速度较慢 这就是我通常做的事情:http://codepad.viper-7.com/RVKmAG