如何在PHP中转换解码一些特殊字符?

时间:2017-03-03 08:48:37

标签: php special-characters decode

我有一个编码的字符串为"%87123"。现在,当我显示该字符串时,它应该被解码为"‡123"。我的代码如下:

t:zone

我尝试过许多不同的功能,例如urldecode,rawurldecode,htmlentities,iconv等等。 如果有人可以为此提供帮助。 在此先感谢。

1 个答案:

答案 0 :(得分:3)

看起来这是一个不符合标准UTF-8编码的字符串的url编码版本(如今常用,特别是在Web环境中),但是采用旧式的MS-Windows专有版{{ 1}}编码。这确实仍然在某些MS-Windows版本中使用,它几乎与Windows-1252ISO-8859-1相同,但是MS的典型尝试有点不兼容。你现在遭受这个众所周知的策略的结果......

看看这个简单的示例脚本:

ISO-8859-15

输出结果为:

<?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编码,则会得到您期望的结果......

因此,您的情况很可能是在MS内部编码中编码的某些字符串被注入Web环境而未进行重新编码。由于PHP无法以某种方式神奇地猜测它会执行其解码工作并传递结果,这是一个无效的UTF-8编码字符串。你必须告诉PHP它应该采用什么编码,不可能自动检测到它。