Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换html文档中的所有标题属性_Php_Dom_Replace_Html Parsing - Fatal编程技术网

Php 替换html文档中的所有标题属性

Php 替换html文档中的所有标题属性,php,dom,replace,html-parsing,Php,Dom,Replace,Html Parsing,我有一个变量中的html代码。例如,$html等于: <div title="Cool stuff" alt="Cool stuff"><a title="another stuff">......</a></div> 绝对不要使用正则表达式——这是一个脏兔子洞。…洞是脏的,不是兔子:) 我更喜欢使用DomDocument和Xpath直接针对html文档中所有元素的所有title属性

我有一个变量中的html代码。例如,
$html
等于:

<div title="Cool stuff" alt="Cool stuff"><a title="another stuff">......</a></div>

绝对不要使用正则表达式——这是一个脏兔子洞。
…洞是脏的,不是兔子:)

我更喜欢使用DomDocument和Xpath直接针对html文档中所有元素的所有
title
属性

  • LIBXML\u HTML\u NOIMPLIED | LIBXML\u HTML\u NODEFDTD
    标志已就位,以防止输出被
    标记修饰
  • XPath表达式中的
    /
    表示:在搜索匹配项时,转到任何深度
代码:()

$html=value=$newTitle;
}
echo$dom->saveHTML();
输出:

<div title="My new title" alt="Cool stuff"><a title="My new title">......</a></div>
。。。。。。

您应该使用
simplexmlement()
将html转换为对象,这样您就可以在具有
title=“where”
的节点上使用XPath。开始吧。@MonkeyZeus啊,我没有看到“关于这个答案的内容有争议……”的横幅。我刚才看到过很多次这样的答案,当关于Regex和HTML的问题被要求获取所有带有标题的节点时,可以使用
/*[@title]
@MonkeyZeus谢谢。这似乎是我一直在寻找的解决方案。我不能接受这是正确的答案,所以我会接受另一个(后来的)解决方案。但再次感谢你,
$html = <<<HTML
<div title="Cool stuff" alt="Cool stuff"><a title="another stuff">......</a></div>
HTML;
$newTitle = 'My new title';

$dom = new DOMDocument();
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//@title') as $attr) {
    $attr->value = $newTitle;
}
echo $dom->saveHTML();
<div title="My new title" alt="Cool stuff"><a title="My new title">......</a></div>