我目前正在完成一个电子卡片系统,它允许用户通过邮件将卡片发送给其他人。
邮件还包含一个在浏览器中查看同一张卡片的链接,该链接基本上是通过使用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=中文这样的url输出$_GET[]时,它工作得很好。因此,显然是base64_encode或base64_decode不能处理中文字符。
发布于 2012-10-04 16:55:29
base64_函数不对字符进行操作,它们对字节进行操作。它们会很高兴地转换你传入的任何东西,而不会出错。
这里的问题是,用作输入的字符的编码与解码后显示这些字符的页面的编码不匹配。“你的文字”是从哪里来的?如果它来自表单提交,则需要确保表单出现的页面使用与“视图层”页面相同的编码显示,或者表单具有与“视图层”页面的编码相匹配的accept-charset属性。
https://stackoverflow.com/questions/12723235
复制相似问题