str_replace 在某些情况下不起作用

发布于 2024-10-31 16:15:33 字数 497 浏览 1 评论 0原文

我使用curl来获取html并将其保存到$content。然后我尝试 str_replace,它不起作用:

echo str_replace('DojoApplications','OK',$content);

但是当我尝试打印 $content 并复制源代码并将其再次保存到 $content 时,它起作用了:

echo $content;然后我复制打印的内容并将其再次保存到 $content:

$content='It is Dojo;应用程序';

使用新的 $content,上面的替换可以工作。

I use curl to get html and save it to $content. Then I try the str_replace, it doesn't work:

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

But when I try to print $content and copy the source and save it to $content again, it works:

echo $content; Then I copy the printed and save it to $content again:

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

With the new $content, the replacement above works.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

相对绾红妆 2024-11-07 16:15:33

尝试也添加'\"'。我认为这是一个问题。我不认为“style”标签没有什么区别。

Try to put '\"' also. I think it's a matter of this. I don't think the "style" tag has nothing that makes the difference.

酒废 2024-11-07 16:15:33

我的猜测是额外的空格或换行符或类似的内容,尝试替换块..
例如

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

,尝试找出失败的地方,然后你就可以找出原因

My guess is extra spaces or a newline or similar, try replacing chunks..
eg

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

and try and work out where it is failing, then you can track down why

千鲤 2024-11-07 16:15:33

这对我有用:

<?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 都有出色的处理 HTML 的函数。我不推荐使用正则表达式来完成该任务:它们不可靠并且很难几乎正确。

This works for me:

<?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); 

So you probably have actual line feeds inside the strings and they aren't encoded in the same format, e.g., one is \n (Linux) and the other is \r\n (Windows). You can normalize both strings before comparing:

<?php
$content = strtr($content, array(
    "\r\n" => PHP_EOL,
    "\r" => PHP_EOL,
    "\n" => PHP_EOL,
));

In any case, PHP has excellent functions to handle HTML. I would not recommend regular expressions for the task: they're unreliable and very hard to get almost right.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文