Php str_ireplace()不仅替换最后一个匹配项
我正在尝试替换网页的URL。我使用DOM获取页面中的所有链接,循环浏览链接,并使用str_ireplace逐个查找和替换。 str_ireplace仅替换最后一个链接。当我计数时,它给出了要替换的链接数的正确计数,但不替换链接Php str_ireplace()不仅替换最后一个匹配项,php,Php,我正在尝试替换网页的URL。我使用DOM获取页面中的所有链接,循环浏览链接,并使用str_ireplace逐个查找和替换。 str_ireplace仅替换最后一个链接。当我计数时,它给出了要替换的链接数的正确计数,但不替换链接 $contents=file_get_contents($_GET['page']); $dom = new DOMDocument; @$dom->loadHTML($contents); $links = $dom->
$contents=file_get_contents($_GET['page']);
$dom = new DOMDocument;
@$dom->loadHTML($contents);
$links = $dom->getElementsByTagName('a');
$c=0;
//Iterate over the extracted links and display their URLs
foreach ($links as $link){
//echo $link->nodeValue;
$arr['retUrl']=$link->getAttribute('href');
$xyz=json_encode($arr);
$rurl=$base_url.'?ret_url='.urlencode($xyz);
echo $arr['retUrl'].'<br>'.$rurl.'<br><br><br>';
$x=str_ireplace($link->getAttribute('href'),$rurl,$contents,$count);
$c=$c+$count;
echo '--'.$count.'--';
}
echo $x;
这是因为您输出了$x,那么$x是什么呢?它是$contents,处理了最后一个$link。我确信您也需要将所有以前的替换内容保存在$contents中。替换
$x=str_ireplace($link->getAttribute('href'),$rurl,$contents,$count);
与
在这里,您将用每个替换的链接覆盖$contents。循环后-输出$contents。查看它,将其更改为:
$x .= str_ireplace($link->getAttribute('href'),$rurl,$contents,$count);
当他从不使用变量$content开始时,为什么要将$content=设置为任何值。这不在他的范围之内,仍然是错误的。您使用$contents进行的操作与他使用$x的操作相同。您应该执行$contents.=将更新的内容附加到字符串中。即使如此,这也是错误的,因为他已经在作用域的前面设置了$contents,它将直接从文件I/O以.Nope开头附加到已经建立的内容。每个循环$x都是一个新值,在任何地方都不会使用。因此,我在$contents中覆盖了everylink,并再次将覆盖的文本保存到$contents。对于您的解决方案,您将在先前替换的$contents中追加$contents。但是我想你太聪明了,不懂它。为什么你会在interator的作用域内重用$contents,而它却存在于该作用域之外?这样做的目的是什么?在你糟糕的例子的末尾$contents的值仍然只包含一个链接;找出正确的数组层次结构,然后重写迭代器。然后,将$x=str\u ireplace更改为$x.=str\u ireplace相同的输出。没有任何变化它是否与url格式有关?我是说特殊人物。它应该替换的URL是以下类型:`&;othersrcp=2988543不,一旦它们在字符串中,它们就在字符串中。您的var_dump应该向您显示一个包含其中每个链接的大型数组,如果没有,那就是一个问题。但是这行代码:echo$arr['retUrl']..$rurl。;打印所有要替换的URL。因此,我认为$links没有任何问题
$x .= str_ireplace($link->getAttribute('href'),$rurl,$contents,$count);