我有一个 html 页面加载到 PHP 变量中,并使用 str_replace 将某些单词更改为其他单词。唯一的问题是,如果其中一个单词出现在一段重要的代码中,那么整个代码就会崩溃。
有没有办法只将 str_replace 函数应用于某些 html 标签?特别是:p,h1,h2,h3,h4,h5
EDIT:
重要的代码:
$yay = str_ireplace($find, $replace , $html);
提前欢呼并感谢您的任何答复。
编辑 - 进一步澄清:
$find 和 $replace 是包含要查找和替换的单词(分别)的数组。 $html 是包含所有 html 代码的字符串。
一个很好的例子就是如果我要查找并替换出现在例如中的单词。域名。所以如果我想用“奶酪”代替“帽子”这个词。任何出现像这样的绝对路径
www.worldofhat.com/images/monkey.jpg
将替换为:
www.worldofcheese.com/images/monkey.jpg
因此,如果替换只能发生在某些标签中,则可以避免这种情况。
不要将 HTML 文档视为单纯的字符串。正如您已经注意到的,标签/元素(以及它们的嵌套方式)在 HTML 页面中具有意义,因此,您需要使用一个知道如何构成 HTML 文档的工具。这将是DOM then:
这是一个例子。首先使用一些 HTML
$html = <<< HTML
<body>
<h1>Germany reached the semi finals!!!</h1>
<h2>Germany reached the semi finals!!!</h2>
<h3>Germany reached the semi finals!!!</h3>
<h4>Germany reached the semi finals!!!</h4>
<h5>Germany reached the semi finals!!!</h5>
<p>Fans in Germany are totally excited over their team's 4:0 win today</p>
</body>
HTML;
这是让阿根廷高兴所需的实际代码
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//*[self::h1 or self::h2 or self::p]');
foreach( $nodes as $node ) {
$node->nodeValue = str_replace('Germany', 'Argentina', $node->nodeValue);
}
echo $dom->saveHTML();
只需添加您想要替换 XPath 查询调用中的内容的标签即可。使用 XPath 的替代方法是使用DOMDocument::getElementsByTagName,您可能从 JavaScript 中知道:
$nodes = $dom->getElementsByTagName('h1');
事实上,如果你通过 JavaScript 了解它,你可能会了解更多,因为DOM 实际上是 W3C 定义的与语言无关的 API并以多种语言实现。 XPath 的优点getElementsByTagName
显然可以一次性查询多个节点。缺点是,您必须了解 XPath :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)