2012-03-05 63 views
2

IM这个jQuery的数据输入表单中,我需要一个特定的领域要与数据从MySQLjQuery用户界面 - 自动完成 - UTF8字符集

我得到的一切工作自动完成的工作,自动完成从SQL通过PHP 检索数据匹配英语/拉丁字符很好

问题是,当我输入希腊语时,我只得到case SENSITIVE匹配 如果我输入正确的话,我得到我的匹配并且一切顺利,但是id喜欢它不区分大小写

,你明白我的使用它与外部源,所以即时猜测比较两个字符串时,它必须是什么...正确输入情况下完美的作品...

也,你会在我的代码看,我有一个数组[ID,名称] 我目前的配置,(甚至是区分大小写)我搜索的名称,出现下拉菜单,当我点击我想要的名称,电池被充满了ID,当我提交表单,该ID被发布到下一个PHP页面。

有没有什么办法让同样的事情,但不是填充字段标识的名称来填补呢?即:搜索名称,下拉名称,点击并获得该字段中的名称,当我提交我得到的ID张贴?

任何帮助将不胜感激。 下面的代码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> 
<script language="javascript" type="text/javascript" src="js/dropdowndata/dropdowndata.name.js"></script> 

等等等等......

<li class="ui-widget"><label for="name"> Last name: </label><input class="name" name="name" style="width:100px" /></li> 

这里的JS:

$(function() { 
    var cache = {}, 
     lastXhr; 
    $(".name").autocomplete({ 
     minLength: 1, 
     source: function(request, response) { 
      var term = request.term; 
      if (term in cache) { 
       response(cache[ term ]); 
       return; 
      } 

      lastXhr = $.getJSON("search.php", request, function(data, status, xhr) { 
       cache[ term ] = data; 
       if (xhr === lastXhr) { 
        response(data); 
       } 
      }); 
     } 
    }); 
}); 

和这里的源(search.php中):

<?php 

       $link = mysql_connect("1","2","3"); 
         if (!$link) { die("Database Connection Failed". mysql_error());} 

    mysql_set_charset('utf8',$link); 

       $db_select = mysql_select_db("form2",$link); 
         if(!$db_select){die("Database Selection Failed " . mysql_error());} 

    mysql_query("SET NAMES 'utf8'", $link); 

       $result1 = mysql_query("SELECT dlastname,dfirstname,id FROM doctors ORDER BY dlastname ASC", $link); 
         if(!$db_select){die("No Data found in db " . mysql_error());   } 

$items=array(); 

       while($row = mysql_fetch_array($result1)){ 
         $items[$row['id']] = $row['dlastname']. ", ". $row['dfirstname'];} 

sleep(1); 
if (empty($_GET['term'])) exit ; 
$q = strtolower($_GET["term"]); 
if (get_magic_quotes_gpc()) $q = stripslashes($q); 



$result = array(); 
foreach ($items as $value=>$key) { 
     if (strpos(strtolower($key),$q) !== false) { 
       array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($value))); 
     } 
     if (count($result) > 11) 
       break;} 

echo json_encode($result); 


?> 

你可以看到我已经收录 mysql_set_charset('utf8',$ link); mysql_query(“SET NAMES'utf8'”,$ link); 在我的源代码的PHP文件 +在我的网页的字符集... 甚至试图设置源PHP文件标签,但它搞砸一切:(

,你明白我是很新的这一切,所以如果ANY1可能需要一些时间,并解释我什么我在想念着,这将是巨大的:) 也是任何其他建议/改进将是巨大的,因为这是我的代码:)

感谢名单第一件一个提前

回答

2

我想通了, 那里似乎是用strtolower()和UTF-8字符集 一个问题,我切换 用strtolower($字符串) 两个occurances在search.php中来: mb_strtolower (($字符串), 'UTF-8') 和它的工作;)

代码看起来现在这个样子:

sleep(1); 
if (empty($_GET['term'])) exit ; 
//change in next line: 
$q = mb_strtolower(($_GET["term"]),'UTF-8'); 
if (get_magic_quotes_gpc()) $q = stripslashes($q); 



$result = array(); 
foreach ($items as $value=>$key) { 
     //change in next line: 
     if (strpos(mb_strtolower(($key),'UTF-8'),$q) !== false) { 
       array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($value))); 
     } 
     if (count($result) > 11) 
       break;} 

echo json_encode($result); 

thanx的答复家伙:) 它比较清楚,以我一个上午的心态+咖啡:)

任何想法在这: “也,你会在我的代码看,我有一个数组[ID,名称]我目前的配置,(即使区分大小写)我搜索名称,出现下拉列表,当我点击我想要的名称时,单元格会填充ID,当我提交表单时,ID会被发布到下一个PHP页面。

有什么办法有完全一样的东西,但不是填充字段标识的名称来填补呢?即:搜索名称,获取名称下拉,点击并获得该字段的名称,当我提交我得到的ID发布?“

+0

伟大的工作找到你的答案。但是,为了充分利用这个问答网站并帮助其他有问题的用户,您应该明确地将您的下一组问题分为一个全新的问题,以便您的答案就是这样,这个问题的答案。 :) – jmort253 2012-03-05 20:28:59

0

你需要添加一个标题开始的PHP页面(索引或任何你从ajax(search.php)调用)

header("Content-Type:text/html; charset=utf-8"); 
+0

它does not工作,不幸的是 我添加了你告诉我的行, 我还增加了 mysql_set_charset( 'utf-8',$链接); 的mysql_query( “集名称 'UTF8'”,$链接); 同样的事情,CASEINSENSITIVE搜索英文字符和CaseSENSTIVIE希腊:( – krasatos 2012-03-05 08:51:21

+0

我找不出如何写@尔卡-kopriva 啊,它就在那里:) – krasatos 2012-03-05 08:57:33

+0

你为什么不尝试使用直接做比较的数据库查询 - SELECT ...值LIKE“%...%”是安全的,并与确定性。 – 2012-03-05 12:03:05

0

在自动完成插件的文档中,有一个选项matchCase。默认情况下,它被设置为false。将其更改为true,然后匹配应该不区分大小写。

http://docs.jquery.com/Plugins/Autocomplete/autocomplete 
+0

@ jmort254我要指出,我不是你使用上面提到的自动完成,但这: [链接] http://jqueryui.com/demos/自动完成/ 他们使用相同的选项吗? – krasatos 2012-03-05 08:55:19

+0

@ jmort254我输入的代码反正: \t $( “医生”).autocomplete({ \t \t的minLength:1, \t \t matchCase:真, ... 似乎没有任何改变,我仍然得到CASEINSENSITIVE英文字符和区分大小写的希腊... 我不明白:) – krasatos 2012-03-05 09:03:19

+0

在本文档中,有可能会超越,做了比较,以确定要显示的方法的方法。如果您使用特殊(非英文)字符,您可能必须走这条路线。 – jmort253 2012-03-05 16:51:38

相关问题