Urldecode斯堪的纳维亚ASCII值

问题描述:

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

我试图解码一个字符是这样的:

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

但是这给黑钻石。与urldecode()函数相同的结果。

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

对英文字母(如%61)使用rawurldecode()函数时效果很好。 请参阅http://www.backbone.se/urlencodingUTF8.htm所有URL编码的ASCII码。

+0

当你将字符串设置为'%C3%A5'时,它会工作吗? – RST

+0

是的,它适用于%C3%A5。我一直坚持这个奇怪的问题几个小时.. 这个在线工具给出了同样的不好的结果https://www.functions-online.com/rawurldecode.html – Droabs

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

你的问题是你正在输出一个ISO-8859-1编码的字符串,但却告诉浏览器将它解释为UTF-8。要么改变编码在你的HTTP标头/ meta标签,或者从8859的字符串转换为UTF-8:

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

(有几乎从来没有为utf8_encode的好时机,但在这种情况下,它实际上是简洁地执行通常你应该更喜欢使用iconvmb_convert_encoding显式字符集转换。)

+0

非常感谢你的欺骗! Dankeschön! 你怎么知道它的ISO-8859-1?有什么网站可以搜索吗? – Droabs

+0

它必须是*单字节编码*,因为只有一个字节用于编码字符。 UTF-8会为这个字符使用两个字节。 ISO-8859-1是最常用的单字节编码,所以这是我第一次猜测。表中的快速查询证实了这一点。 - 除非你有这样的经验/直觉,否则你只需要浏览所有的编码表来找出它。 – deceze

+0

感谢您的解释。没有你的帮助,我迷失在编码丛林中。 – Droabs

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

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

rawurldecode不支持“斯堪的纳维亚ascii”字符集。

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

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

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

+0

谢谢!我试过'iconv('CP865','UTF-8',$ string); '运气不好。 – Droabs

+0

不是iconv,因为你有url编码的CP865,而iconv需要字节编码,而不是url编码。 你也可以编写一个函数来解码url编码的CP865,字符集很小,不会太难。 – mihaitzateo