所以,我遇到了PHP的rawurlencode函数的问题。我们的网络应用程序中的所有文本字段在被网络服务器处理之前当然会被转换,并且我们已经使用了rawurlencode。对于我找到的几乎每个角色都适用,期望获得“£”符号。现在,我们的用户没有理由永远输入英镑符号,但他们可能会这么做,所以我想要照顾好这一点。(PHP)rawurlencode/decode似乎将'£'标记编码为''(%C2%A3而不是%A3)
问题是rawurlencode不会将网页上输入的英镑符号编码为%A3,而是将其编码为%C2%A3。更糟糕的是,如果用户未能输入另一个关键信息(这会导致网页刷新 - 检查在后端完成 - 并尝试使用用户使用的信息重新填充表单框),那么当%C2通过rawurldecode/encode运行,它变成了? - 又名%C3 ?.当然这个“£”也会变成另一个!
那么,这是什么原因造成的?我认为这是一个字符编码问题,但我不知道这些事情。我听说某处我可以手动编码为&磅,但为什么我需要在数据库可以处理“英镑”时做这件事,并且英镑符号有百分比编码?这是rawurlencode中的错误,还是由不同字符集造成的错误?
感谢您的任何帮助。
因此,哪种方法更好 - 更改表单的字符集 - 请注意,我在w3schools上找到的属性是accept-charset,而不是字符集 - 或者在代码中使用iconv?我读到IE显然不能正确使用accept-charset,那么将服务器端转换为UTF更好吗? – Stephen 2010-07-13 13:30:55
@Stephen你说得对,它是“接受字符集”。我认为最好在服务器端做,因为标准并不能保证你不会得到UTF-8。更好的是,始终使用UTF-8,包括将数据存储在数据库中。国际海事组织,所有新的Web应用程序都应朝着这个方向前进。 – Artefacto 2010-07-13 15:43:50
@Stephen请注意,尽管这是标准,但仍有一些实现问题,特别是一些浏览器使用页面编码来确定提交的编码,尽管存在“accept-charset”。请参阅http://stackoverflow.com/questions/153527 – Artefacto 2010-07-13 15:53:08