2016-09-29 32 views
3

Iは、PHP json_encode法によって作成された値のJSON表現をフェッチしているAJAX呼び出しを持っている:jQueryのオートコンプリート特殊文字

値はjQueryのによって「コントローラ/ ajax_autocomplete」から採取されている
["Montérégie","Montréal - North Shore ","Montréal - South Shore"] 

オートコンプリートボックス。

$(function(){ $("#regions").autocomplete({    
      source: "controller/ajax_autocomplete", 
      contentType: "application/json; charset=utf-8" 
}               
      });    
    }); 

すべての値がcorectly jQueryのUIのUI-オートコンプリートによってピックアップされているが、特別なcharatersは失われます。 Montréal become Montréal, Montérégie become Montérégie ...

JSONテーブルをjquery関数に手作業でコピーすると、問題がなくなるため、特殊文字はhttp転送中に確実に破棄されます。

$(function(){ $("#regions").autocomplete({    
      contentType: "application/json; charset=utf-8", 
      source: "["Montérégie","Montréal - North Shore ","Montréal - South Shore"]" 
}               
      });    
    }); 

プログラムでHTMLエンティティをデコードするには、テキストボックスの値のために動作しますが、候補リストには、まだHTMLエンティティ

$(function(){ $("#regions").autocomplete({    
     source: "controller/ajax_autocomplete", 
     select: function(event, ui) { 
       event.preventDefault(); 
       this.value = $('<div />').html(ui.item.value).text(); 
     }                                                
     });    
}); 

ソリューションは、候補リストでHTMLエンティティをデコードするだろうとの特殊文字を置き換える

+0

これは役立つかどうかを確認するhttp://stackoverflow.com/a/34415506/4802649 – Phiter

答えて

0

私はajaxの出力をPHPのhtml_entity_decodeメソッドにラップすることで、サーバー側でこの問題を解決しました。

0

あなたが使用する必要があります。

例:

var myData = ["Montérégie","Montréal - North Shore ","Montréal - South Shore"]; 
encodeURIComponent(JSON.stringify(myData)) 
+0

あなたの例ではローカル配列を使用していますが、自動補完がそのような場合には動作することが既に説明されています。問題は、サーバーからクライアントへのhttp転送中に特殊文字がhtmlエンティティにエンコードされていることです。 – ronline