我使用此代码通过curl获取页面:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$message = curl_exec($ch);
curl_close($ch);
我现在想要对$ message中的代码进行一些替换,但在此之前我将代码转储到文件中:
file_put_contents('debug_before_replace.txt',$message);
当我看一下这个文件时,所有文字似乎都很好,例如我在这里有标题:
<title>D.O.C.| Jantar Vínico Quinta do Portal | Quinta-feira, 25 de Junho 2009</title>
现在我做替换:
$ message = str_ireplace(array(
'身体GT;',
'/体&GT;'
)
阵列(
$ fraseemcima,
$ frasebaixo
)
$消息
);
现在我将$ message转储到另一个文件:
file_put_contents('debug_after_replace.txt',$message);
当我看一下这个文件时,我看到了这个:
<title>D.O.C.| Jantar VÃnico Quinta do Portal | Quinta-feira, 25 de Junho 2009</title>
我在其余的代码中有各种混乱的字符。
任何人都明白为什么stri_replace搞砸了这个?我正在尝试发送一些邮件,这会弄乱一切。
注意:在替换中我确实有正文和/ body标签,但如果我添加&lt;所以会删除单词
编辑:我修好了!!使用这条简单的线条,一切正常,外观看起来很棒:
$message = utf8_decode(curl_exec($ch));
感谢macbirdie和S. Gehrig将我指向了正确的方向。 猜猜在字符集方面我还有一些学习要做的事情
再次感谢
答案 0 :(得分:1)
您正在编辑的文本很可能是UTF-8或其他一些编码的多字节编码。 str_ireplace()
不多字节安全,可在单字节上运行。这会导致您的多字节字符可能被破坏。
如果文档包含 B yte- O rder- M 方舟( BOM ),您还应检查 - 这也可能导致一些问题(根据this comment)
答案 1 :(得分:1)
您必须使用多字节感知功能进行字符替换,例如mb_eregi_replace()
。
如果有,该文件也可能丢失unicode用来指示UTF-8扩展字符写入哪些endiannes的byte-order mark,因为它可能会丢失,因为替换函数可能会将其视为非文字,但这纯粹是猜测。