1

我目前正在完成一个允许用户通过邮件将卡片发送给其他人的电子贺卡系统。

邮件还包含一个在浏览器中查看同一张卡片的链接,这个链接基本上是通过对文本进行编码生成的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[] 时,它工作正常。所以很明显是 the base64_encodeorbase64_decode不能处理汉字。

4

1 回答 1

4

这些base64_函数不对字符进行操作,而是对字节进行操作。他们会很高兴地转换您传入的任何内容而不会出错。

您的问题是您用作输入的字符的编码与解码后显示它们的页面的编码不匹配。“你的文字”从何而来?如果是表单提交,则需要确保表单出现的页面使用与“查看卡片”页面相同的编码显示,或者表单具有accept-charset与“查看卡片”页面的编码匹配的属性.

于 2012-10-04T08:55:28.963 回答