字符编码似乎适用于 MAMP 服务器,但不适用于 WAMP 服务器
-
23-08-2019 - |
题
我一直在开发一个网络应用程序,它应该能够接受多种语言的标签和搜索查询。这要求并不过分,不是吗?
现在,在我的开发 MAMP 服务器上一切都很好。我添加多语言标签,用我想要的任何语言进行搜索等。
另一方面,在生产 WAMP 服务器上,多语言字符会带来麻烦。甚至不是一直,只是某些时候,或者某些角色,我还不确定。
发生的情况是,它们获得了额外的字符,然后它们的 URL 解码不正确。
两个环境都使用 PHP 5、MySQL 和 Apache。
我的猜测是我在某个地方设置错误。
有任何想法吗?
更新:我现在确定这是特定的字母(例如希伯来语 ל、מ א)
更新:易于重现:相同的字母总是会出现错误的编码。
- 内容类型是
text/html; charset=utf-8
另外,我还进一步指出了这一点:
我使用搜索字符串: ליבני
在结果页面上我看到这个:
- 地址栏中的搜索短语是正确的,并且 URL 编码正确。
- 在 HTML 本身中,我看到字符串“�_יבני“ 这是”
%D7_%D7%99%D7%91%D7%A0%D7%99
” 这意味着 ל 已被编码为“%D7_
“ 代替 ”%D7%9C
“正如它应该的那样。
我真的不知道该去哪里进一步。
有任何想法吗?任何人?
解决方案 3
事实证明问题出在 PHP 的 parse_url() 中的某个地方。我猜想在某些版本中,在某些平台上,parse_url()不能正确处理UTF字符。它被发现在窗户上 至少再一次.
我现在可以解决这个问题。
感谢大家的时间和关注,Omer。
其他提示
字符集是一个简单的概念。令人困惑的是,它们必须在多个级别上正确完成。如果你在一个地方搞砸了,它通常会表现在完全不同的地方。
因此,对你的问题的稍微居高临下但又非常真实的答案是,你需要知道你在做什么,而不是只是用棍子戳它,直到它看起来还不错。
我推荐阅读以下内容:
我建议您使用 UTF-8 进行内部和外部编码。使用 AddDefaultCharset
指示 告诉 Apache 你的默认编码:
AddDefaultCharset utf-8
现在您只需要确保您的应用程序正确处理数据(请参阅 default_charset
指示)。如果您使用 UTF-8 作为输出,客户端也应该使用它来进行进一步的请求(URL、表单数据)。