2010-09-16 92 views
0

你好,我刚开始开发PHP我想要做的就是从其他网站获取XML内容,但是当我得到它像这样PHP卷曲,XML内容人品问题

$options = array(
    CURLOPT_RETURNTRANSFER => true,  // return web page 
    CURLOPT_HEADER   => false, // don't return headers 
    CURLOPT_ENCODING  => "UTF-8",  // handle compressed 
CURLOPT_USERAGENT  => "spider", // who am i 
); 
$ch  = curl_init("http://wxxx.xml"); 
curl_setopt_array($ch, $options); 
$file = curl_exec($ch); 
curl_close($ch); 

返回乱码,我可以当我将页面标题改为UTF-8时,使它看起来像确定,但问题是我无法将这些变量插入到数据库中,因此它们也被破坏了,我该如何解决这个问题?谢谢你的回答。

回答

0

如果在更改页面的标题以表明它使用UTF-8编码时字符正常,它们不会被破坏;您正在处理以一种格式(UTF-8)编码的字符数据,就像它在另一个格式中编码一样。

你应该检查什么:

  • 验证XML源文件,事实上,UTF-8编码,因为这是你在你的卷曲选项中指定的内容。

  • 找出你的数据库使用的编码是什么。

如果您需要能够在您的数据库中存储Unicode字符,则可以将其中的字符编码更改为UTF-8。或者,您可以使用utf8_decode()(如果数据库存储ISO-8859-1字符)或mb_convert_encoding()从源文档进行转换。但是,如果源文档中的字符无法在数据库使用的系统中编码,则会丢失信息。

0

CURLOPT_ENCODING option用于指定Accept-Encoding header field值,而不是用于接受的字符编码。尝试Accept-Charset来代替:

$options = array(
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_HEADER   => false, 
    CURLOPT_USERAGENT  => "spider", 
); 
$header = array('Accept-Charset: UTF-8'); 
$ch  = curl_init("http://wxxx.xml"); 
curl_setopt_array($ch, $options); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header) 
$file = curl_exec($ch); 
curl_close($ch); 
0

从PHP的卷曲文档:

CURLOPT_ENCODING:的的内容 “的Accept-Encoding:” 标头。这个 启用了解码响应。 支持的编码是“身份”, “放气”和“gzip”。如果设置了空的 字符串“”,则会发送包含所有支持的编码 类型的标头 。

此选项不是控制如何curl将解释响应字节,而是使之接受被转移为压缩流,例如内容gzip的。

您的脚本将获得该内容,您可以使用PHP的mb_string/icnov函数转换其编码。但是,请确保您已正确设置数据库整理和连接整理。

0

再次感谢您的回答,他们非常帮我找到问题,并特别感谢ngroot,因为我一直在考虑卷曲问题,但问题出在数据库,当我试着第一次回答2时,我没有结果,我检查数据库,我看到我将xml文件的标题保存为VARCHAR和UTF-8 Turkish作为编码,比我试过UTF-8 unicode,并且我看到数据库变量变得更具可读性,最后我将标题作为VARBINARY保存到数据库,一切都是再次解决谢谢你的一切帮助。