我有一个编码字符串“%87123”。现在,当我显示该字符串时,它应该被解码为“‡123”。我的代码如下:
$code = '%87123';
echo urldecode($code);
die;
我尝试过许多不同的函数,例如 urldecode、rawurldecode、htmlentities、iconv 等等。 如果有人可以为此提供帮助。 提前致谢。
最佳答案
看起来这是字符串的 url 编码版本,不是标准 UTF-8
编码(当今常用,尤其是在 Web 环境中),而是采用老式的 MS- Windows 专有的 Windows-1252
编码。这确实仍在某些 MS-Windows 版本中使用,它与 ISO-8859-1
或 ISO-8859-15
几乎相同,但作为典型的 MS 尝试有点不兼容。你现在正遭受那个众所周知的策略的结果......
看一下这个简单的示例脚本:
<?php
var_dump(urlencode('‡123'));
var_dump(urldecode('%87123'));
var_dump(iconv('Windows-1252', 'UTF-8', urldecode('%87123')));
输出为:
string(12) "%E2%80%A1123"
string(4) "�123"
string(6) "‡123"
因此,解码结果可以解释为以Windows-1252
编码的字符串。如果是这样,然后将其转换为标准 UTF-8
编码,您将得到预期的结果...
因此,您的情况很可能是,以 MS 内部编码编码的某些字符串被注入(inject)到 Web 环境中,而没有重新编码。由于 PHP 无法以某种方式神奇地猜测它完成了解码工作并提供了结果,即无效的 UTF-8 编码字符串。你必须告诉 PHP 它应该采用什么编码,这是不可能自动检测到的。
关于php - 如何转换php中的一些特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42574351/