我目前正在完成一个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_encode
或base64_decode
无法处理中文字符。
答案 0 :(得分:1)
base64_
函数不对字符起作用,它们对字节进行操作。他们会愉快地转换您传递的任何内容而不会出错。
您的问题是,您用作输入的字符的编码与解码后显示的字符的编码不匹配。 “你的文字”来自哪里?如果是来自表单提交,则需要确保显示表单的页面使用与“查看卡”页面相同的编码显示,或表单具有{{1} }属性匹配“视图卡”页面的编码。