php、urldecode() 和元音变音 - ö
使用 PHP 5.3.2,我在处理名称中包含元音变音的页面的请求时遇到问题:ö
使用 Firefox + Live HTTP headers 为 test_ö_test.htm 页面发出请求,我可以看到 Firefox 自动转换/在发出请求时对元音变音进行编码:
GET /test_%C3%B6_test.htm HTTP/1.1
现在,使用 http://meyerweb.com/eric/tools/ dencoder/ 我能够在 test_ö_test.htm 和 test_%C3%B6_test.htm 之间进行编码/解码,所以我认为编码是正确的。
使用 PHP 的 urldecode(),我得到 test_ö_test.htm
并且返回了令人讨厌的 404。请注意,文件系统上确实存在 test_ö_test.htm。
当我使用 javascript 的 escape() 进行测试时,我得到 test_%F6_test.htm。当我将其插入浏览器时,我成功返回了内容页面。 urldecode() 将其转回元音变音。
Using PHP 5.3.2, I'm having trouble with handling a request for a page whose name has an umlaut in it: ö
Making the request using Firefox + Live HTTP Headers for the test_ö_test.htm page, I can see firefox automatically converts/encodes the umlaut when it makes a request:
GET /test_%C3%B6_test.htm HTTP/1.1
Now, using http://meyerweb.com/eric/tools/dencoder/ I am able to encode/decode between test_ö_test.htm and test_%C3%B6_test.htm, so I figure that encoding is correct.
Using PHP's urldecode(), I get test_ö_test.htm
And the hated 404 is returned. Note that test_ö_test.htm does exist on the file system.
When I test with javascript's escape() I get test_%F6_test.htm. When I plug that into my browser, I get the content page returned successfully. urldecode() turns that back into the umlaut.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的页面被声明为 ISO-8859-1,而您的数据则采用 UTF-8 编码。这会导致浏览器尝试将两字节 UTF-8 序列 0xc3 0xb6 解释为两字符 Latin-1 序列“LATIN CAPITAL LETTER A WITH TILDE”“PILCROW SIGN”。您的数据和页面的内容编码需要一致。
Your page is declared as ISO-8859-1, while your data is UTF-8 encoded. This results in the browser trying to interpret the two byte UTF-8 sequence 0xc3 0xb6 as the two character Latin-1 sequence "LATIN CAPITAL LETTER A WITH TILDE" "PILCROW SIGN". Your data and the content encoding of the page need to agree.