我一直在开发一个网络应用程序,它应该能够接受多种语言的标签和搜索查询。这要求并不过分,不是吗?

现在,在我的开发 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、表单数据)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top