从Percent Encoded URL参数中获取正确的UTF-8字符

时间:2012-08-26 10:18:25

标签: php utf-8 character-encoding

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

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

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

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

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

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

说实话我对此感到困惑,这个问题似乎也让人感到困惑,而且我给你的信息也可能不是很好,所以我道歉并试图提供更详细的信息。任何问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

确保没有任何改变$_REQUEST的功能。有些功能不了解特殊编码。

调查的最佳方法是在变量变更之前和之后检查变量的状态。

答案 1 :(得分:2)

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

当操作utf-8字符串时,总是使用多字节字符串函数。

使用mb_strtolower代替strtolower()

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