base64_encode(),中文字符

时间:2012-10-04 08:27:06

标签: php base64 character

我目前正在完成一个ecard系统,允许用户通过邮件向其他人发送卡片。

邮件还包含一个链接,用于在浏览器中查看同一张卡片,此链接基本上是通过使用base64_encode()

编码文本生成的。
'http://www.test.com/ecards?card=' . base64_encode('your text'); // like this

这适用于英文文本,但是一旦我输入一些中文并访问该链接,这些字符就会搞砸了

汉��N�B��Y][ۘ[�[�\�N�9�(�*���B�[�Z[��0��q��B��[\Y�YY�[�\�N�9cc�+�N�B��Y][ۘ[�[�\�N�:#��*���B��[�\�N�9.+y���

我与我的字符集无关,它设置为UTF-8,我甚至打印了相同的中文文本,它完美地显示出来。

所以我想知道base64_encode()base64_decode()是否可能与此有关。

// Doesn't work
echo base64_decode($body);

// Chinese characters show up fine!!!!
echo 'simplified Chinese: 汉语; <br />';
echo 'traditional Chinese: 漢語; <br />';
echo 'Pinyin: Hànyǔ; <br />';
echo 'simplified Chinese: 华语; <br />';
echo 'traditional Chinese: 華語; <br />';
echo 'Chinese: 中文; <br />';

编辑:当我在使用http://www.test.com/ecards?card =中文等网址时尝试输出$ _GET []时,它运行正常。 显然base64_encodebase64_decode无法处理中文字符。

1 个答案:

答案 0 :(得分:1)

base64_函数不对字符起作用,它们对字节进行操作。他们会愉快地转换您传递的任何内容而不会出错。

您的问题是,您用作输入的字符的编码与解码后显示的字符的编码不匹配。 “你的文字”来自哪里?如果是来自表单提交,则需要确保显示表单的页面使用与“查看卡”页面相同的编码显示,表单具有{{1} }属性匹配“视图卡”页面的编码。