您好我刚刚开始开发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 :(得分: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到数据库,一切都解决了再次感谢你的帮助。