用于中文字符的PHP urlencode

时间:2012-08-03 15:22:15

标签: php utf-8 urlencode url-encoding

我正在创建一个php应用程序,它涉及将中文字符作为url参数发送。

我必须发送如下查询:

http://xyz.com/?q=新

但是xyz.com上的脚本不会自动编码中文字符。所以,我需要显式发送一个编码的字符串作为参数。它变成了:

http://xyz.com/?q=%E6%96%B0

问题是,PHP不会正确编码中文字符。

我已尝试urlencode()rawurlencode()。但他们给%D0%C2(不适用于我的目的)而不是%E6%96%B0(适用于xyz.com)作为输出。

我正在使用this网站创建后一个编码字符串。

我还定义了header('Content-Type: text/html; charset=gb2312');来正确显示中文字符。

我能做些什么来正确地对中文字符进行urlencode?

谢谢!

PS:我是一个相对较新的程序员,不懂中文。

2 个答案:

答案 0 :(得分:4)

您使用在标头中指定的字符集进行网址编码。 %D0%C2 在gb2312中为新; %E6%96%B0 在UTF-8中为新。将你的字符集切换到UTF-8,你应该解决这个问题,仍然可以显示简体中文汉。

答案 1 :(得分:1)

为了重现您的问题,我创建了一个简单的PHP文件:

<?php
var_dump(urlencode('新'));
?>

首先我使用了UTF8编码并获得了%E6%96%B0。之后我改为GB2312并获得%D0%C2

http://meyerweb.com/eric/tools/dencoder/,他们似乎使用JavaScript,支持UTF8,因此也返回%E6%96%B0

PS:从GB2312更改为UTF8时,某些编辑器可能会破坏代码的一些国际化代码。因此,请确保在转换前获得文件的副本!