我在使用可怕的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。
说实话我对此感到困惑,这个问题似乎也让人感到困惑,而且我给你的信息也可能不是很好,所以我道歉并试图提供更详细的信息。任何问题。
谢谢!
答案 0 :(得分:2)
确保没有任何改变$_REQUEST
的功能。有些功能不了解特殊编码。
调查的最佳方法是在变量变更之前和之后检查变量的状态。
答案 1 :(得分:2)
我想补充一点关于utf-8字符串操作的一点。
当操作utf-8字符串时,总是使用多字节字符串函数。
使用mb_strtolower
代替strtolower()