我正在创建一个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? p>
谢谢!
PS:我是一个相对较新的程序员,不懂中文。
答案 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时,某些编辑器可能会破坏代码的一些国际化代码。因此,请确保在转换前获得文件的副本!