【问题标题】:Urldecode scandinavian ascii valuesUrldecode 斯堪的纳维亚 ascii 值
【发布时间】:2016-04-10 13:13:33
【问题描述】:

我在用 PHP 解码 url 编码的斯堪的纳维亚 ASCII 值时需要帮助。

我试过这样解码 å 字符:

$string = "%e5";
echo rawurldecode($string);

但这会产生黑色钻石。与 urldecode() 函数的结果相同。

我在头部使用<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta charset="utf-8">

在像 %61 这样的英文字母上使用 rawurldecode() 函数时效果很好。 有关所有 url 编码的 ASCII 代码,请参见 http://www.backbone.se/urlencodingUTF8.htm

【问题讨论】:

  • 将字符串设置为%C3%A5时是否有效?
  • 是的,它适用于 %C3%A5。我被这个奇怪的问题困扰了好几个小时。这个在线工具给出了同样糟糕的结果functions-online.com/rawurldecode.html

标签: php encoding utf-8 converter urldecode


【解决方案1】:

E5 是字符 å 的 ISO-8859-1 编码表示。

您的问题是您正在输出一个 ISO-8859-1 编码的字符串,但却告诉浏览器将其解释为 UTF-8。更改 HTTP 标头/元标记中的编码,或将字符串从 8859 转换为 UTF-8:

echo utf8_encode(rawurldecode('%e5'));

utf8_encode 几乎没有好时机,但在这种情况下,它实际上简洁地执行所需的字符集转换。通常您应该更喜欢使用 iconvmb_convert_encoding 进行显式字符集转换。)子>

【讨论】:

  • 非常感谢 deceze!丹克申!你怎么知道它的ISO-8859-1?有没有可以搜索的网站?
  • 它必须是单字节编码,因为只有一个字节用于对字符进行编码。 UTF-8 将为此字符使用两个字节。 ISO-8859-1 是最常用的单字节编码,所以这是我的第一个猜测。在其表中快速查找证实了这一点。 – 除非您有这种经验/直觉,否则您只需查看所有编码表即可找出答案。
  • 感谢您的解释。没有你的帮助,我在编码丛林中迷路了。
【解决方案2】:

utf-8 字符集不包含 e5 代码。

请检查带有 utf-8 字符集的表格。 尝试使用有效的 utf-8 字符串。

rawurldecode 不支持“scandinavian ascii”字符集。

尝试支持 CP865 的功能 iconv 之一(我猜这是您想要支持的字符集):

http://php.net/manual/ro/function.iconv-mime-decode.php

http://php.net/manual/ro/function.iconv-mime-decode-headers.php

【讨论】:

  • 谢谢!我运气不好尝试了iconv('CP865', 'UTF-8', $string); 函数。
  • 不是 iconv,因为你有 url 编码的 CP865,而 iconv 需要字节编码,而不是 url 编码。你也可以写一个函数来解码url编码的CP865,字符集小,不会太难。
猜你喜欢
  • 2018-11-14
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多