我正在通过 url 从各个站点获取数据。 Url 参数使用 php urlencode()
进行 url 编码函数,但字符编码仍然可以是 UTF-8 或 Latin-1。
例如,é 字符,当从 UTF-8 url-encoded 变成 %C3%A9 但当从 Latin-1 url-encoded 时,它变成 %E9。
当我通过 url 获取数据时,我使用 urldecode()
然后我需要知道什么是字符编码,所以我最终使用了 utf8_encode
在我将它们插入 MySQL 数据库之前。
奇怪的是,以下代码不起作用:
$x1 = 'Cl%C3%A9ment';
$x2 = 'Cl%E9ment';
echo mb_detect_encoding(urldecode($x1)).' / '.mb_detect_encoding(urldecode($x2));
它返回
UTF-8 / UTF-8
为什么会这样,我做错了什么,我怎么知道这些字符串的字符编码?
谢谢
最佳答案
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"
关于php - 我如何知道 url 编码的字符串是 UTF-8 还是 Latin-1 与 PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21384050/