マジカル%EF%BB%BF

WBOY
リリース: 2016-06-23 13:28:15
オリジナル
1869 人が閲覧しました

早速、コードについて説明します:
フロントエンド:

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 "";	   }	}
ログイン後にコピー


問題の症状: たとえば、「Baidu」と入力します
div #searchresult に表示:
Baidu Antivirus
Baidu Guard
Baidu Video
最初の項目、Baidu Anti-Virus を選択すると、Firefox に次のメッセージが表示されます:
http://192.168.1.101/index/select_infomessage-s_paramName-%EF%BB%BF%Baidu Anti-Virus .html
何もありません。 。 。
2 番目の項目 Baidu Guard を選択すると、Firefox ブラウザーに次のように表示されます:
http://192.168.1.101/index/select_infomessage-s_paramName-Baidu Guard.html
通常の検索、情報を検索できます。他の項目も正常ですが、最初の項目が異常です。

Du Niang は、それは BOM ヘッダーだと言いました。私のページはすべて BOM ヘッダーが削除されており、エンコーディングも utf8 です。いろいろ試しましたが、問題は解決できませんでした。
最初の項目に %EF%BB%BF% が追加されているのはなぜですか? 他の項目は正常に表示されます。


ディスカッションへの返信 (解決策)

%EF%BB%BF は BOM ヘッダーの URL エンコーディングではありませんか?

1 つしかないため、プログラムによってロードされたファイルのうち、BOM ヘッダーを持つのは 1 つだけです

public function get_search_showdiv()

この関数が配置されている PHP スクリプト ファイルには BOM があります

%EF ではありません%BB%BF は BOM ヘッダーの URL エンコーディングだけですか?

1 つしかないので、プログラムによってロードされたファイルのうち、BOM ヘッダーを持つのは 1 つだけです


申し訳ありませんが、最近出張から帰ってきたばかりです。どういう意味ですか?
utf-8 ファイルの BOM ヘッダーの 16 進表現は EFBBBF です

エンコードされた URL は %EF%BB%BF です

Ajax で要求された URL は __APP__/index/get_search_showdiv です
明らかにこれはフレームワークを使用しています

Frameworkリクエストを処理するとき、少なくとも 3 つのファイルがロードされます
したがって、ロードされたファイルには BOM ヘッダーがあり、返されるコンテンツには BOM ヘッダーが含まれます
接続は ....%EF%BB%BF Baidu Antivirus になります。
....%EF%BB%BF%EF%BB%BF Baidu Antivirus.html の代わりに
は、BOM ヘッダーを持つファイルが 1 つだけであることを意味します

ajax は xxx@xxx@xxx@ の形式で文字列を受け取ります
もちろん、BOM はコンテンツの前に追加されます: BOMxxx@xxx@xxx@
配列に分割した後は、当然最初のアイテムのみに BOM が含まれます


では、この問題を解決する方法

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート