str_replace在某些情况下不起作用

时间:2011-04-13 09:05:54

标签: php str-replace

我使用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,上面的替换工作正常。

3 个答案:

答案 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。我不建议使用正则表达式来完成任务:它们不可靠并且很难几乎正确。