首先,我想说,我不尝试用正则表达式解析HTML
,所以不建议我使用PHP DOM,但是我试图使用它,但在我的情况下PHP DOMDocument
弄乱了最终的HTML
标记,因为其中包含内联JavaScript
和jQuery
动态代码生成和/或内容替换,例如:
$("#status-message").show(200).html("<div style=''>...</div>")
将输入JavaScript
字符串中的内嵌jQuery
/ HTML
代码移至外部.js
文件以包含不选项(虽然这个可以解决PHP DOMDocument
)的问题。
通过使用PHP DOMDocument
,最终标记将被saveHTML()
方法上的实体替换(当然会生成无效代码),例如:
function zeroPad(num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
这是尝试将输入HTML
字符串中的给定标记**与** regex 匹配的原因,删除它并返回修改后的HTML
字符串(在大多数情况下,输入HTML
字符串可能是有效的HTML
)。
这是我目前为止使用正则表达式的代码:
<?php
$html = "<html>
<head>
<link rel='stylesheet' type='text/css' href='http://www.example.com/themes/css.min.css'>
</head>
<!-- A LOT OF STUF HERE--></html>";
//The URL
$url = preg_quote("http://www.example.com/themes/css.min.css");
//The pattern
$pattern = "~<link\s+[href=".$url."][^>]*>~i";
//The output
$output = preg_replace($pattern, "", $html);
?>
我尝试匹配<link>
或<head>
部分中的给定<body>
(不区分大小写的)标记(即使它放置在具有给定<body>
属性的href
)中的无效标记,等于给定的URL。
href
属性的展示位置可以是代码中的任何位置,<link>
代码也可以是自动关闭的(即所有代码都必须匹配)。
我不在乎href
标签中是否有更多1 <link>
个属性(虽然这也是无效标记)(即所有属性必须匹配)...
我不在乎1 <link>
个标签是否具有相同的href
属性(即所有标签必须匹配)。
href
属性的内容可以使用单引号,双引号或未引用引用全部,或者,即使它是无效的标记可能会错过引用,或混合使用单/双/无引号(即所有引号都必须匹配)。
有效匹配的示例:
<link rel="stylesheet" type="text/css" href="http://www.example.com/themes/css.min.css">
<link href='http://www.example.com/themes/css.min.css">
编辑(新的有效示例):
<LinK href=http://www.example.com/themes/css.min.css />
<link
href=http://www.example.com/themes/css.min.css />
这让我疯狂了几天,任何帮助都将受到赞赏。
答案 0 :(得分:2)
试试这个
$url = preg_quote($url, '/');
echo preg_replace('/<link([^>]*?)href[\s]?=[\s]?[\'\"\\\]*'.$url.'([^>]*?)>/is', '', $html);
中查看