php - 如何转换php中的一些特殊字符?

标签 php special-characters decode

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

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

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

最佳答案

看起来这是字符串的 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 内部编码编码的某些字符串被注入(inject)到 Web 环境中,而没有重新编码。由于 PHP 无法以某种方式神奇地猜测它完成了解码工作并提供了结果,即无效的 UTF-8 编码字符串。你必须告诉 PHP 它应该采用什么编码,这是不可能自动检测到的。

关于php - 如何转换php中的一些特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42574351/

相关文章:

php - 使用 LIKE 子句从 MySQL 结果中删除重复记录?

javascript - Stripe 结帐自定义按钮不充电

php - 在菜单项之间添加分隔线(忽略伪类)

pdo - 带有特殊字符的 PHP PDO

Extjs 如何解码一个 json 字符串?

python - 解码 utf-16 字符串时出现问题

php - 在 PDO 中传递多个参数

tinymce - 如何阻止 TinyMCE 将 HTML 实体转换回特殊字符?

c++ - 无法理解带有特殊字符的 C++ 字符串的输出

php - 我如何循环遍历 php 文件中的这个 json 对象?