我通过网址从各个网站获取数据。 url参数使用php urlencode()
函数进行url编码,但字符编码仍然可以是UTF-8或Latin-1。
例如,é字符,当从UTF-8进行url编码时变为%C3%A9但是当从Latin-1进行url编码时,它变为%E9。
当我通过url获取数据时,我使用urldecode()
然后我需要知道什么是字符编码,所以我最终在将它们插入MySQL数据库之前使用utf8_encode
。
奇怪的是,以下代码不起作用:
$x1 = 'Cl%C3%A9ment';
$x2 = 'Cl%E9ment';
echo mb_detect_encoding(urldecode($x1)).' / '.mb_detect_encoding(urldecode($x2));
返回UTF-8 / UTF-8
为什么这样,我做错了什么,我怎么知道那些字符串的字符编码?
由于
答案 0 :(得分:2)
mb_detect_encoding()
通常无法使用默认的第二个参数:
<?php
$x1 = 'Cl%C3%A9ment';
$x2 = 'Cl%E9ment';
$encoding_list = array('utf-8', 'iso-8859-1');
var_dump(
mb_detect_encoding(urldecode($x1), $encoding_list),
mb_detect_encoding(urldecode($x2), $encoding_list)
);
...打印:
string(5) "UTF-8"
string(10) "ISO-8859-1"