0

我在使用可怕的 UTF-8 字符编码时遇到了一些麻烦!这让我发疯,无论我采用哪种方式或遵循多少在线指南,我都无法让它返回所需的结果。这是发生了什么:

  • 我的整个网站使用一个简单的 UTF-8 编码的文本文件数据库,它正确地显示了各种特殊字符,拉丁文、阿拉伯文、日文,只要你说出它的名字,它们都可以正确显示,但有一个例外:

  • 当用户使用我网站上的“搜索”输入框时,我使用 $search = $_REQUEST['search']; 在结果页面上获取输入数据并相应地显示结果。当用户在搜索框中插入特殊字符时,他们会在 URL 中获得“百分比编码”(例如,“ï”变成“%E3%AF”)。在实际网站中显示 $string 时,任何特殊字符都会显示为 �(带问号的黑色菱形)。

  • 我已经尝试了这里所说的一切http://malevolent.com/weblog/archive/2007/03/12/unicode-utf8-php-mysql/除了 header()。我已经在我的 head 部分使用 http-equiv 元将字符集设置为 UTF-8,但是由于某种原因,每当我将其设置为 header() 时,我的 PHP 样式表就会停止工作(并且字符问题仍然存在)。也许这是一个线索?

  • 我也尝试过 urldecode 和 rawurldecode ,但它们并没有改变任何东西。

  • 请记住,特殊字符在站点的其他地方正确显示,只有 $search 字符串出现此问题。作为旁注,即使字符没有正确显示,我的搜索引擎在过滤结果时确实正确解释了特殊字符。这让我明白特殊字符实际上存在并且正确编码,但这只是使用正确的字符集使其正确可视化的问题。然而......一切似乎都是UTF-8。

老实说,我对此感到非常困惑,以至于这个问题似乎也令人困惑,而且我提供给您的信息也可能结构不完善,因此我深表歉意,并会尝试为任何问题提供更详细的信息。

谢谢!

4

2 回答 2

2

确保没有任何功能会改变您的$_REQUEST. 有些函数不知道特殊编码。

最好的调查方法是检查变量更改前后的状态。

于 2012-08-26T11:44:51.747 回答
2

关于 utf-8 字符串操作,我想再补充一点。

处理 utf-8 字符串时,始终使用多字节字符串函数。

使用 mb_strtolower代替strtolower()

http://php.net/manual/en/ref.mbstring.php

于 2012-08-26T11:58:10.590 回答