Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jQuery自动完成特殊字符(挪威语)问题_Php_Javascript_Jquery - Fatal编程技术网

Php jQuery自动完成特殊字符(挪威语)问题

Php jQuery自动完成特殊字符(挪威语)问题,php,javascript,jquery,Php,Javascript,Jquery,我在挪威网站上使用jQuery的自动完成功能。当输入挪威字符æ、ø和å时,自动完成功能会提示具有相应字符的单词,但不会提示以相应字符开头的单词。似乎我必须设法在文字的中间编码挪威字符,而不是从字母开始的字符。 我正在使用一个PHP脚本和我自己的函数,将挪威字符编码为UTF-8并生成自动完成列表 这真令人沮丧 代码: PHP代码: $q = strtolower($_REQUEST["q"]); if (!$q) return; function rewrite($string){ $to

我在挪威网站上使用jQuery的自动完成功能。当输入挪威字符æ、ø和å时,自动完成功能会提示具有相应字符的单词,但不会提示以相应字符开头的单词。似乎我必须设法在文字的中间编码挪威字符,而不是从字母开始的字符。

我正在使用一个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
        }
    )
}
);

我使用了类似的配置,但使用的是丹麦语字符(æ、ø和å),我对任何字符都没有问题。您确定所有字符的编码都正确吗

我的响应包含一个|分隔的值列表。所有值都是UTF-8编码的(这就是它们在数据库中的存储方式),我将内容类型设置为text/plain;charset=utf-8,使用php的头函数。不过,它不需要最后一位就可以工作

  • 坦率的
    • 缺陷(我认为):

      • 不会使用小写特殊字符
      • 因此,您没有在重写函数中转换大写特殊字符(
        ÄÆØ
        等)
      如果我正确理解了代码,那么对
      Øygarden
      (注意大写字母Ø)的查询将以原始形式保留第一个字符
      Ø
      ,但您是在查询urlencode()d表单,它应该是
      %C3%98

      您应该使用指定UTF-8作为编码

      让我知道这是否解决了问题

      一般重写建议

      您的代码可以使用标准PHP函数100%替换,标准PHP函数可以处理所有Unicode字符,而不仅仅是您指定的字符,因此不太容易出现错误。我认为您的自定义
      rewrite()
      函数的功能可以由

      • urldecode()
      • ()
      然后您将获得正确的UTF-8编码数据,不再需要
      utf8\u encode()

      有可能获得一种更干净的方法,这种方法适用于所有角色。也可能是因为它已经对存在的任何bug进行了排序(如果bug在您的代码中)。

      感谢您提供的所有答案和帮助。我确实学到了一些关于PHP和编码的新知识:)

      但对我有效的解决方案是:

      我发现jQuery autocomplete函数实际上在发送到PHP函数之前对特殊字符进行UTF-8编码和小写。因此,当我写出建议内容的数组时,我使用
      rewrite()
      -函数对特殊字符进行编码。因此,在我的比较函数中,我只需将所有内容小写即可


      现在它工作得很好

      我也有类似的问题。在我的例子中,解决方案是使用urldecode()php函数将字符串转换回原始字符串,然后将查询发送到数据库

      在第一个位置使用非编码字符时是否得到有效的返回?以及如何构建返回列表-可能有助于查看代码\查询。为什么要使用自定义编码脚本,为什么不使用ajax在utf-8中发布数据?