php curl,xml内容字符问题

时间:2010-09-16 15:07:10

标签: php database encoding curl character-encoding

您好我刚刚开始开发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时,我可以使它看起来好像但问题是我无法将这些变量插入数据库,它们也在那里被破坏了,我该如何解决这个问题?谢谢你的回答。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

来自PHP的curl文档:

  

CURLOPT_ENCODING:“Accept-Encoding:”标头的内容。这个   能够解码响应。   支持的编码是“身份”,   “deflate”和“gzip”。如果是空的   字符串,“”,设置,标题   包含所有支持的编码   类型已发送。

此选项不是为了控制curl将如何解释响应字节,而是为了使其接受作为压缩流传输的内容,例如: gzip的。

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

答案 2 :(得分:0)

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

你应该检查什么:

  • 验证XML源文档实际上是UTF-8编码的,因为这是您在curl选项中指定的内容。

  • 找出数据库使用的编码。

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

答案 3 :(得分:0)

再次问好了感谢您的回答,他们相当帮助我找到问题,特别感谢ngroot,因为我一直想着卷曲,但问题是在数据库,当我尝试前2个答案我没有结果,当我检查数据库我看到我保存了xml文件的标题为VARCHAR和UTF-8土耳其语作为编码,而不是我尝试了UTF-8 unicode,我看到数据库变量变得更加可读,最后我将标题保存为VARBINARY到数据库,一切都解决了再次感谢你的帮助。