【问题标题】:How to convert decode some special characters in php?如何在php中转换解码一些特殊字符?
【发布时间】:2017-03-03 08:48:37
【问题描述】:

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

$code = '%87123';
echo urldecode($code); 
die;

我尝试过许多不同的函数,例如 urldecode、rawurldecode、htmlentities、iconv 等等。 如果有人可以为此提供帮助。 提前致谢。

【问题讨论】:

  • 不知道为什么您希望该字符串被解码为您的期望...尝试urlencode('‡123')我得到%E2%80%A1123...

标签: php special-characters decode


【解决方案1】:

看起来这是一个字符串的 url 编码版本,不是标准的 UTF-8 编码(今天常用,尤其是在 Web 环境中),而是老式的 MS-Windows 专有 Windows-1252 编码.这确实仍在某些 MS-Windows 版本中使用,它与 ISO-8859-1ISO-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 内部编码编码的某些字符串被注入 Web 环境而没有重新编码。由于 PHP 无法以某种方式神奇地猜测它完成了它的解码工作并提供了结果,这是一个无效的 UTF-8 编码字符串。你必须告诉 PHP 它应该采用什么编码,这是不可能自动检测到的。

【讨论】:

  • 谢谢!!!这个对我有用。就一个问题。你是怎么知道这个字符集的?
  • 很高兴听到我能提供帮助 ;-) 我在通过无数 API、系统、工作流进行数据交换方面积累了相当多的经验……具体而言:科学图书馆环境中历史上增长的数据集合整个欧洲......这包括你突然在你家门口发现的各种异国情调的东西。你对时间感到好奇和不信任。当 MS-Windows 系统开始发挥作用时,这种习惯尤其需要引起注意……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2017-05-30
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多