jQuery自动完成特殊字符(挪威语)问题
我在我的挪威网站上使用jQuery的自动完成function。 当输入挪威字符æ,ø和å时,自动完成function会建议具有相应字符的单词,但不会显示以相应字符开头的单词。 似乎我要设法在单词中间对挪威字符进行字符编码,而不是以字母开头的字符。
我正在使用带有我自己的函数的PHP脚本将挪威字符编码为UTF-8并生成自动完成列表。
这真是令人沮丧!
码:
PHP代码:
$q = strtolower($_REQUEST["q"]); if (!$q) return; function rewrite($string){ $to = array('%E6','%F8','%E5','%F6','%EB','%E4','%C6','%D8','%C5','%C4','%D6','%CB', '%FC', '+', ' '); $from = array('æ', 'ø', 'å', 'ä', 'ö', 'ë', 'æ', 'ø', 'å', 'ä', 'ö', 'ë', '-', '-'); $string = str_replace($from, $to, $string); return $string; }
$items
是一个包含建议词的数组。
foreach ($items as $key=>$value) { if (strpos(strtolower(rewrite($key)), $q) !== false) { echo utf8_encode($key)."\n"; } }
jQuery代码:
$(document).ready(function(){ $("#autocomplete").autocomplete("/search_words.php", { position: 'after', selectFirst: false, minChars: 3, width: 240, cacheLength: 100, delay: 0 } ) } );
错误(我认为):
-
Strtolower()
不会小写特殊字符。 - 因此,您不会在重写function中转换大写特殊字符(
Ä Æ Ø Å
等)
如果我正确理解代码,对Øygarden
(注意大写Ø)的查询会将第一个字符保留为原始formsØ
,但是你要查询的urlencode()dforms应该是%C3%98
您应该使用指定UTF-8的mb_convert_case()
作为编码。
让我知道这是否解决了它。
一般重写建议
您可以使用标准PHP函数100%替换您的代码,这些函数可以处理所有Unicode字符而不仅仅是您指定的字符,因此不容易出现错误。 我认为您的自定义rewrite()
函数的function可以替换为
- urldecode()
- iconv ()
然后,您将获得正确的UTF-8编码数据,您不再需要utf8_encode()
。 有可能以适用于所有角色的方式获得更清晰的方法。 它也可能已经排除了任何错误(如果错误在您的代码中)。
我使用类似的配置,但使用丹麦字符(æ,ø和å),我对任何字符都没有问题。 您确定要正确编码所有字符吗?
我的回复包含一个| 分隔的值列表。 所有值都是UTF-8编码(这是它们存储在数据库中的方式),我将内容类型设置为text / plain; charset = utf-8使用php的头文件function。 尽管如此,它不需要最后一点。
- 坦率
感谢您的所有答案和帮助。 我当然学到了一些关于PHP和编码的新东西:)
但对我有用的解决方案是这样的:
我发现jQuery自动完成函数实际上是UTF-8在将它发送到PHP函数之前编码和小写特殊字符。 因此,当我写出建议内容的数组时,我使用了rewrite()
函数来编码特殊字符。 所以在我的比较函数中,我只需要小写一切。
现在它很棒!
我有类似的问题。 在我的情况下解决方案是urldecode()php函数将字符串转换回它的原始而不是发送查询到db。