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

标签 php character-encoding url-encoding

我正在通过 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/

相关文章:

php - php类中的递归函数

javascript - 在新窗口中打开链接,而不是在新选项卡中

php - 如何将数据从 HTML 表单保存到 WordPress 中的数据库表?

php - 从查询中分解数组

c# - 有没有办法在 C# 中以字节为单位告知 UTF-8 编码字符串的长度?

php - 使用 Curl PHP 进行 URL 编码

angularjs - 在 angularjs 的查询字符串中使用波斯字符

encoding - 如何强制 Mailgun 通过 API (php) 使用 base64 编码发送电子邮件?

php - 使用 PHP 从 MySQL 数据库中获取特殊字符

vbscript - 如何判断一个URL是否已经用encodeURI编码?