2016-09-29 149 views
3

我有一个AJAX调用,其提取由一个PHP json_encode方法创建的值的JSON表示:jQuery的自动完成特殊字符

["Montérégie","Montréal - North Shore ","Montréal - South Shore"] 

的值正在从“控制器/ ajax_autocomplete”由一个jquery收获自动填充框。

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

jQuery UI的ui-autocomplete正在挑选出所有的值,但特殊的字符都丢失了。 Montréal become Montréal, Montérégie become Montérégie ...

特殊字符在http传输期间肯定会被破坏,因为如果我手动将JSON表复制到jquery函数,问题就消失了。

$(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