删除脚本和样式标记中的所有内容

jku*_*ner 9 html javascript php regex jquery

我有一个名为变量的变量$articleText,它包含html代码.有scriptstyle内码<script><style>HTML元素.我想扫描$articleText并删除这些代码.如果我还可以删除实际的HTML元素<script>,</script>,<style></style>,我会做到这一点.

我想我需要使用正则表达式,但我不熟练.

有人可以帮忙吗?

我希望我能提供一些代码,但就像我说我不熟练的正则表达式,所以我没有任何东西可以显示.

我不能使用DOM.我需要专门针对这些特定标签使用正则表达式

Chr*_*ker 23

不要在HTML上使用RegEx.PHP提供了一个解析DOM结构的工具,适当地称为DomDocument.

<?php
// some HTML for example
$myHtml = '<html><head><script>alert("hi mom!");</script></head><body><style>body { color: red;} </style><h1>This is some content</h1><p>content is awesome</p></body><script src="someFile.js"></script></html>';

// create a new DomDocument object
$doc = new DOMDocument();

// load the HTML into the DomDocument object (this would be your source HTML)
$doc->loadHTML($myHtml);

removeElementsByTagName('script', $doc);
removeElementsByTagName('style', $doc);
removeElementsByTagName('link', $doc);

// output cleaned html
echo $doc->saveHtml();

function removeElementsByTagName($tagName, $document) {
  $nodeList = $document->getElementsByTagName($tagName);
  for ($nodeIdx = $nodeList->length; --$nodeIdx >= 0; ) {
    $node = $nodeList->item($nodeIdx);
    $node->parentNode->removeChild($node);
  }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里试试:https://eval.in/private/4f225fa0dcb4eb

文档


Ωme*_*ega 22

即使正则表达式也不是这类任务的好工具,对于它可能起作用的小型简单任务.


如果您只想删除标签的内部文本,请使用:

preg_replace('/(<(script|style)\b[^>]*>).*?(<\/\2>)/is', "$1$3", $txt);
Run Code Online (Sandbox Code Playgroud)

在这里看演示.

如果你想删除标签,上面代码中的替换字符串将为空,所以只是"".

  • 是的,这是一个耻辱,特别是因为提问者特别要求正则表达式的答案. (4认同)
  • 似乎有人正在低估所有正则表达式的答案,我的哀悼 (3认同)
  • @HamZa - 我习惯了.夫妻减分不会对我的声誉产生影响.OP要求正则表达式解决方案,所以我给了他一个.我的回答清楚地说正则表达式不是正确的工具,所以我认为downvoter甚至是坏读者,或者只是那些愤怒的人之一:) (2认同)
  • 当然,我明白了.但是,如果没有某种理由,"我不能使用DOM"就像"我不能使用字母'e'一样有效" - 愚蠢的人为限制.当有人问"我怎么用______做这件事"时,我的第一个问题之一是,"你甚至需要使用______"吗?很多时候,提问者不知道存在更好的东西,或者错误地认为它太难以使用.咩.同样,downvotes可能不值得,但我也得到了DV,所以我怀疑有人试图成为"战略". (2认同)

归档时间:

查看次数:

15003 次

最近记录:

7 年,5 月 前