我有一个 HTML 字符串,我需要检查任何锚的 href 属性是否包含某种链接模式。如果它们匹配某种模式,我需要修改它们。
这是一个示例 HTML 字符串:
<p>Disculpa, pero esta entrada está disponible sólo en <a href="http://www.example.com/static/?json=get_page&post_type=page&slug=sample-page&lang=ru">Pусский</a> y <a href="http://www.example.com/static/?json=get_page&post_type=page&sample-page&lang=en">English</a>.</p>
因此,有问题的 URL 采用以下模式
http://www.example.com/static/?json=get_page&post_type=page&slug=sample-page&lang=ru
其中 lang 查询属性的值是可变的。
如果找到与该模式匹配的 href,我需要将其更改为:
http://www.example.com/ru/sample-page
所以我需要删除“静态”并将其替换为 lang 属性的值,并且需要将“slug”属性的值附加到 URL 的末尾。
可悲的是,我在第一步感到困惑,所以我什至无法测试解析 URL 并用新值替换它们的方法。
$html = '<p>Disculpa, pero esta entrada está disponible sólo en <a href="http://www.example.com/static/?json=get_page&post_type=page&slug=sample-page&lang=ru">Pусский</a> y <a href="http://www.example.com/static/?json=get_page&post_type=page&sample-page&lang=en">English</a>.</p>';
$dom = new DOMDocument;
// The UTF-8 encoding is necessary
$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$anchors = $dom->getElementsByTagName('a');
从理论上讲,从这一点开始,我会遍历找到的锚并做一些事情,但是如果我 var_dump 变量 $anchors ,我只会得到:
object(DOMNodeList)#66 (0) { }
所以我什至无法继续前进!
知道是什么导致 DOM 无法收集锚点吗?
之后,关于如何最好地识别锚是否包含 URL 模式、更改它并返回新修改的 HTML 的任何建议?
更新 1
所以事实证明,5.4.1 之前的 PHP 错误会阻止 var_dump 显示 DOMNodeList 的内容。我可以找到价值
foreach ($anchors as $anchors) {
echo $anchors->nodeValue, PHP_EOL;
}
但是我不知道 $anchors 对象到底是什么样子,所以我瞎了。如果有人对如何解析 $anchors 并按照最初提到的方式修改它们有任何建议,将不胜感激(同时我尝试整理 PHP5.4.1 实例)