我使用curl获取html并将其保存到$ content。然后我尝试str_replace,它不起作用:
echo str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications','OK',$content);
但是当我尝试打印$ content并复制源并再次将其保存到$ content时,它可以正常工作:
echo $ content;然后我复制打印并再次将其保存到$ content:
$content='It is <a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications';
使用新的$ content,上面的替换工作正常。
答案 0 :(得分:0)
尽量把'\''放进去。我认为这是一个问题。我不认为“风格”标签没有什么可以带来不同。
答案 1 :(得分:0)
我的猜测是额外的空格或换行符或类似内容,请尝试替换块... 例如
str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" ','OK',$content);
str_replace('" style="cursor: default;">Dojo</a> Applications','OK',$content);
尝试找出失败的地方,然后找出原因
答案 2 :(得分:0)
这对我有用:
<?php
$content='it is <a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications';
echo str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications','OK',$content);
因此,你可能在字符串中有实际的换行符,并且它们没有以相同的格式编码,例如,一个是\n
(Linux),另一个是\r\n
(Windows)。您可以在比较之前规范化两个字符串:
<?php
$content = strtr($content, array(
"\r\n" => PHP_EOL,
"\r" => PHP_EOL,
"\n" => PHP_EOL,
));
无论如何,PHP都非常出色functions to handle HTML。我不建议使用正则表达式来完成任务:它们不可靠并且很难几乎正确。