废话不多说上代码:
前台:
function on_post_form(){ var f = document.post_myform; var s_paramName = document.getElementById("select_paramName").value; f.action = "__APP__/index/select_infomessage-s_paramName-"+encodeURIComponent(s_paramName)+".html"; f.submit();}<input name="select_paramName" class="KeyWord" id="select_paramName" size="20" maxlength="30" type="text"><div id="searchresult" style="display: none;"></div>
$(document).ready(function(){ $('#select_paramName').keyup(function(){ //输入框的id为search,这里监听输入框的keyup事件 $.ajax({ type:"GET", //AJAX提交方式为GET提交 url:"__APP__/index/get_search_showdiv", //处理页的URL地址 data:"s_Name="+encodeURIComponent($('#select_paramName').val()), //要传递的参数 success:function(data){ //成功后执行的方法 if(data != ""){ var ss; ss = data.split("@"); //分割返回的字符串 var layer; layer = "<table>"; //创建一个table for(var i=0;i<ss.length-1;i++){ layer += "<tr><td class='line'>"+ss[i]+"</td></tr>"; } layer += "</table>"; $('#searchresult').empty(); //先清空#searchresult下的所有子元素 $('#searchresult').append(layer);//将刚才创建的table插入到#searchresult内 $("#searchresult").css("display", ""); $('.line').hover(function(){ //监听提示框的鼠标悬停事件 $(this).addClass("hover"); },function(){ $(this).removeClass("hover"); }); $('.line').click(function(){ //监听提示框的鼠标单击事件 $('#select_paramName').val($(this).text()); $("#searchresult").css("display", "none"); ChangeCoords(); }); }else{ $('#searchresult').empty(); } } }); });});
public function get_search_showdiv() { //urlencode urldecode 文本框自动提示 $keyword = urldecode($_GET['s_Name']); $condition = "f_hotname like '%".$keyword."%'"; $info=$this->model->table('forest')->field('f_hotname')->where($condition)->order('f_id desc')->limit(5)->select(); if($keyword !=""){ foreach($info as $vo) { echo $vo['f_hotname'].'@'; } }else{ echo ""; } }
%EF%BB%BF 不就是 BOM 头的 url 编码吗?
因为只有一个,所以你程序加载的文件中,只有一个有 BOM 头
public function get_search_showdiv()
这个函数所在php脚本文件有BOM
%EF%BB%BF 不就是 BOM 头的 url 编码吗?
因为只有一个,所以你程序加载的文件中,只有一个有 BOM 头
utf-8 文件的 BOM 头的十六进制表示是 EFBBBF
url 编码后是 %EF%BB%BF
ajax 请求的 url 为 __APP__/index/get_search_showdiv
显然这是在使用框架
框架在处理一个请求时,至少会加载 3 个文件
所以任何一个被加载的文件有 BOM 头,返回的内容就会有 BOM 头
连接变成 ....%EF%BB%BF百度杀毒.html
而不是 ....%EF%BB%BF%EF%BB%BF百度杀毒.html
就表示只有一个文件有 BOM 头
ajax 收到的是形如 xxx@xxx@xxx@ 的串
BOM 当然是附加在内容前面的: BOMxxx@xxx@xxx@
拆分成数组后,自然是只有第一项有 BOM 啦
那怎么解决这个问题呢