【问题标题】:php text encoding when GETting a webpage and then POSTing contents获取网页然后发布内容时的php文本编码
【发布时间】:2013-03-29 23:13:30
【问题描述】:

我正在尝试获取网页解析其中的一部分,然后将其作为值发布。问题是:当有 ó 字符时,我检索 ó,因此在发布它时,urlencode 翻译会将这些字符转换为完全不同的字符,这不起作用。

更准确地说,当 utf-8 中的 ó 被解释为 ISO-9959-1 中的情况时会产生 ó,或者至少我的浏览器就是这样做的,如果我设置为以 utf-8 格式查看页面,那么我看 ó,如果我将浏览器设置为在 ISO-9959-1 中查看页面,那么我会看到 ó,其他编码会产生不同的符号。

我尝试将页面结果以及特定字符串转换为 utf-8,我也尝试将标题设置为仅接受 utf-8,但这也不起作用。我很确定这是问题所在,但我的想法已经不多了。我更改了php.ini中的配置但可能我还没有重新启动,基本上这就像在黑暗中拍摄一样,非常感谢一些帮助。

如果有帮助:具体代码在这里:https://github.com/trylks/golem/blob/master/php/copperGolem.php

方法是“form”,当使用 GET 从先前获得的页面中获取参数值之一时。

谢谢。

PD 解决了:过去几个小时我一直在处理这个问题,我不知道我是否更改了许多其他必要的事情。无论如何,使它起作用的最后一个更改是将第 60 行更改为:$dom->loadHTML(mb_convert_encoding($p, 'html-entities', mb_detect_encoding($p))); 成功了。问题不是 libcurl 而是 DomDocument,如下所述:PHP DomDocument failing to handle utf-8 characters (☆)

【问题讨论】:

标签: php http character-encoding libcurl


【解决方案1】:

问题出在DomDocument,它不能正确处理utf-8。转换为 html-entities 是最安全的选择,当使用 echo(甚至使用 cli)输出这些字符或对这些字符进行 urlencoding 时,它就像魔术一样工作。基本上DomDocument 不接受 utf-8,但它输出 utf-8,或者看起来是这样。所以这是一个奇怪的转换,必须进行,以便 DomDocument 撤消它,一切又恢复正常。

要做到这一点,作为 $dom 一个 DomDocument,每次调用 $dom->loadHTML($p) 时都这样做就足够了:

$dom->loadHTML(mb_convert_encoding($p, 'html-entities', mb_detect_encoding($p)));

这在另一个问题中得到了更好的解释:PHP DomDocument failing to handle utf-8 characters (☆)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多