rawurldecode不解码欧元符号

时间:2012-10-22 09:07:36

标签: php urldecode euro

我使用jQuery获取textarea值并使用ajax将其发布到服务器。

我正在使用escape(textarea.val())在jQuery中对URL进行编码。

在我的PHP脚本中,我使用rawurldecode将其转换回来。

这适用于键盘上的每个字符,但欧元符号(€)除外。相反,它返回十六进制代码(%u20AC)。

我不知道如何解决这个问题,据我所知,我的所有字符集设置都是有序的。

由于

2 个答案:

答案 0 :(得分:1)

%u20AC的Unicode编码数据,由JavaScript的escape()函数生成UTF8用于服务器端处理。

标准PHP urldecode无法处理它,因此您需要使用扩展例程:

/**
 * @param string $str unicode and ulrencoded string
 * @return string decoded string
 */
function utf8_urldecode($str) {
    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
    return html_entity_decode($str,null,'UTF-8');;
}

来源:UTF-8 Encoding with internet explorer %u20AC to €

答案 1 :(得分:0)

您的jQuery脚本未根据RFC3986发送数据。

%u20AC不是网址编码。