我有一个编码的字符串为"%87123"。现在,当我显示该字符串时,它应该被解码为"‡123"。我的代码如下:
t:zone
我尝试过许多不同的功能,例如urldecode,rawurldecode,htmlentities,iconv等等。 如果有人可以为此提供帮助。 在此先感谢。
答案 0 :(得分:3)
看起来这是一个不符合标准UTF-8
编码的字符串的url编码版本(如今常用,特别是在Web环境中),但是采用旧式的MS-Windows专有版{{ 1}}编码。这确实仍然在某些MS-Windows版本中使用,它几乎与Windows-1252
或ISO-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它应该采用什么编码,不可能自动检测到它。