如何知道url编码的字符串是PHP的UTF-8还是Latin-1?

时间:2014-01-27 14:58:35

标签: php character-encoding url-encoding

我通过网址从各个网站获取数据。 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

为什么这样,我做错了什么,我怎么知道那些字符串的字符编码?

由于

1 个答案:

答案 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"