PHP卷曲,XML内容人品问题
你好,我刚开始开发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时,使它看起来像确定,但问题是我无法将这些变量插入到数据库中,因此它们也被破坏了,我该如何解决这个问题?谢谢你的回答。
如果在更改页面的标题以表明它使用UTF-8编码时字符正常,它们不会被破坏;您正在处理以一种格式(UTF-8)编码的字符数据,就像它在另一个格式中编码一样。
你应该检查什么:
验证XML源文件,事实上,UTF-8编码,因为这是你在你的卷曲选项中指定的内容。
找出你的数据库使用的编码是什么。
如果您需要能够在您的数据库中存储Unicode字符,则可以将其中的字符编码更改为UTF-8。或者,您可以使用utf8_decode()
(如果数据库存储ISO-8859-1字符)或mb_convert_encoding()
从源文档进行转换。但是,如果源文档中的字符无法在数据库使用的系统中编码,则会丢失信息。
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);
从PHP的卷曲文档:
CURLOPT_ENCODING:的的内容 “的Accept-Encoding:” 标头。这个 启用了解码响应。 支持的编码是“身份”, “放气”和“gzip”。如果设置了空的 字符串“”,则会发送包含所有支持的编码 类型的标头 。
此选项不是控制如何curl
将解释响应字节,而是使之接受被转移为压缩流,例如内容gzip的。
您的脚本将获得该内容,您可以使用PHP的mb_string
/icnov
函数转换其编码。但是,请确保您已正确设置数据库整理和连接整理。
再次感谢您的回答,他们非常帮我找到问题,并特别感谢ngroot,因为我一直在考虑卷曲问题,但问题出在数据库,当我试着第一次回答2时,我没有结果,我检查数据库,我看到我将xml文件的标题保存为VARCHAR和UTF-8 Turkish作为编码,比我试过UTF-8 unicode,并且我看到数据库变量变得更具可读性,最后我将标题作为VARBINARY保存到数据库,一切都是再次解决谢谢你的一切帮助。