我应该删除从通用网站URL的file_get_contents中获取的PHP字符串中的标记之间的所有内容(和标记) . 我正在使用RegEx表达式:
preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $string);
它工作正常,但我的问题是,如果脚本包含CDATA标记,它将无法正常工作 . 字符串的一个例子是:
<script type='text/javascript'>
/* <![CDATA[ */
var variable = {"ajax":"....."}
/* ]]> */
</script>
我猜问题是那些“/ " and " /”标签 .
我已经在google和Stack Overflow上进行了搜索,但对于特定类型的cdata标签(使用/ 和 /)来说,这是毫无疑问的,所以没有任何作用 .
有什么建议吗?
Edit: 正如史蒂夫回答的那样,我现在正在使用这样的代码:
foreach($dom->getElementsByTagName('script') as $scripttag){
$scripttag->parentNode->removeChild($scripttag);
}
然后我有:
foreach($dom->getElementsByTagName('ins') as $string) {
$string2 .= $string->nodeValue;
$string2 .= ' ';
}
但是返回带有脚本标签的$ string2 .
EDIT 2 (SOLVED): 在Steve的帮助下,我发现使用Xpath解决了这个问题:
$xpath = new DOMXpath($dom);
foreach ($xpath->query('//script') as $node) {
$node->parentNode->removeChild($node);
}
这也会删除另一个标记内的脚本标记,例如:
<ins><script>First JS</script></ins>
<ins>Hello</ins>
<script>Second JS</script>
会输出
Hello
谢谢大家的帮助!
1 回答
不要使用正则表达式,使用正确的html解析器,如domdocument: