【发布时间】:2012-05-15 10:38:45
【问题描述】:
我正在向第三方网站发出 cURL 请求,该网站返回一个文本文件,我需要在该文件上进行一些字符串替换,以将某些字符替换为其 html 实体等效项,例如,我需要将 í 替换为 @987654322 @。
在响应上直接使用string_replace/preg_replace_callback不会导致匹配(无论是直接搜索í还是使用其十六进制代码\x00\xED),所以我在执行替换之前使用了utf8_encode()。但是utf8_encode 将所有í 字符替换为Ã。
为什么会发生这种情况,使用 php 对任意一段文本执行 UTF-8 替换的正确方法是什么?
*编辑 - 一些进一步的研究揭示了
utf8_decode("í") == í;
utf8_encode("í") == ÃÂ;
utf8_encode("\xc3\xad") == ÃÂ;
【问题讨论】:
-
你确定文本不是utf-8吗?在编码运行后获得
Ã表明您现在正在对文本进行双重编码。 -
@Marc B 我不确定,因为它是我从中获取 cURL 响应的第三方网站,但是 taht 网站上的 html 页面明确指定了 UTF-8,所以我期望文本文件也会如此。我正在尝试 utf_encode 以响应原始 str_replace 不起作用,并且离弄清楚为什么会这样更近了。
-
当然,您确定要输出到 utf-8 环境中吗?将 utf-8 文本转储到 iso8859 页面将产生相同的效果。
标签: php utf-8 character-encoding