2011-04-13 116 views
0

我使用curl来获取html并将其保存到$ content。然后我尝试str_replace函数,这是行不通的:str_replace在某些情况下不起作用

echo str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications','OK',$content);

但是,当我尝试打印$内容和复制源并再次将其保存到$内容,它的工作原理:

回声$内容;然后,我复印打印并保存到再次$内容:

$content='It is <a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications';

有了新的内容$,上述作品的替代品。

+0

它适用于我 - PHP 5.3.2-1ubuntu4.5 – 2011-04-13 09:09:03

+1

它的工作.. http://codepad.org/6SLzSaLW – 2011-04-13 09:10:30

+0

再次发布的问题不会改变这一事实,你还没有演示如何重现问题。除非我们能够重现它,否则我们无法修复它。 – 2011-04-13 10:22:01

回答

0

尝试把“\“”也。我认为这是这个问题。我不认为‘风格’标签有什么,使其中的差别。

+0

's/nothing/anything /' – 2011-04-13 09:19:32

+0

thanx,有时候我很难用英文思考,通常我认为用西班牙语 – elvenbyte 2011-04-13 09:23:57

0

我的猜测是多余的空格或换行或类似的,请尝试更换块.. 如

str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" ','OK',$content); 
str_replace('" style="cursor: default;">Dojo</a> Applications','OK',$content); 

,并尝试找出它失败,那么你就可以追查

+0

然后你可以用DOM操作代替hacky来代替破损的字符串。 – 2011-04-13 09:20:17

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。我不会推荐任务的正则表达式:他们不可靠,很难得到差不多的权利。

+0

请阅读我更新的问题。我怀疑我使用curl获得的$内容与我在echo $ content中看到的不同。 – user570494 2011-04-13 09:23:03

+0

@ user570494:您是否使用“查看源代码”或浏览器的HTML输出“查看”它?你不可能从HTML输出中正确地分析空白。 – 2011-04-13 09:46:30

+0

@ user570494 - 当您打印内容时,您如何看到文本包含的确切的结束字符?您更新的问题表明,问题正是我猜到的问题。 – 2011-04-13 09:46:49

相关问题