【JavaScript】使用get方法提交Ajax之前對於某些符號的處理方案

來源:互聯網
上載者:User

標籤:javascript   ajax   url   字元轉義   半形   

某些項目是用get的方法來提交Ajax,後台再對get的方法的值傳遞過來的值進行解碼。比如在提交ajax的url寫上/xx?param1=xx&param=2...

這樣很不好,一般,都是使用post方法來提交的。post方法提交Ajax在《【Servlet】在Servlet3.0中利用json+ajax把資料庫查詢出來的資料推向前台顯示,無額外的json解析包》(點擊開啟連結)與《【Struts2】利用JQuery實現Struts2的Ajax功能》(點擊開啟連結)已經提到過,這裡不再贅述,但是,面對項目中一大堆前任留下來的也好,或者自己就喜愛的get方式ajax,你就應該對傳遞過去的參數進行處理。否則,如果使用者在輸入框寫入~`[email protected]#$%^&*()_+-={}|[]\:"<>?;‘,./等這些奇奇怪怪的英文符號,就有可能截斷提交的url,讓你的web工程崩潰。

你在擷取使用者在表單填寫的東西之後,就應該處理好~`[email protected]#$%^&*()_+-={}|[]\:"<>?;‘,./這些奇奇怪怪的英文符號。字元轉義是網頁開發的一個很嚴重的問題。以前的輸入框少,這個問題還不嚴重,現在輸入框的,使用者在網路上面互動多,這個問題就變得越來越嚴峻。

你還不能像《【JavaScript】某些字元不轉義可以導致網頁崩潰與涉及逸出字元的顯示方法》(點擊開啟連結)所給的方法一樣,把~`[email protected]#$%^&*()_+-={}|[]\:"<>?;‘,./這些奇奇怪怪的英文符號寫成& amp; & lt;等逸出字元,這樣,&就更多了,提交的url還是截斷了。所以一般就不應該用get的方法提交Ajax的,但是,你可以考慮把這些符號都改成全形。

下面給出僅符號不包括英文,半形轉全形的方法:

/* * escapeAjaxString()是在以get方法的ajax提交之前,對被提交的文本作調用 * 防止[email protected]#$%^&*()等符號使得get方法的ajax地址斷裂 */function escapeAjaxString(txtstring) {var tmp = "";for (var i = 0; i < txtstring.length; i++) {if (txtstring.charCodeAt(i) == 32) {tmp = tmp + String.fromCharCode(12288);}if ((32 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 48)|| (57 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 65)|| (90 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 97)|| (122 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 127)) {tmp = tmp + String.fromCharCode(txtstring.charCodeAt(i) + 65248);} else {tmp = tmp + String.fromCharCode(txtstring.charCodeAt(i));}}return tmp;}
注意到第二個判斷,裡面的條件非常多,但也只是一個範圍。因為在Ascii碼錶、Unicode碼錶中,符號的分布是斷裂在不同的區間的。

這裡插一句:Unicode碼錶包含Ascii碼錶,Ascii碼錶是Unicode碼錶的子集,Unicode碼錶的0-255就是Ascii碼錶全部,Ascii碼錶的0-255,順序還是一樣的。

上面演算法對傳遞過來的字串進行檢驗:

如果遇到空格,則將其位移12288位置,變成中文的空格。

如果遇到半形符號,則將其位移65248個位置,將其變成全形的符號。

如果遇到其它東西,則不位移。

然後重新構造一個新的字串,返回。

這就完成了半形符號、空格向全形的轉化。Get方法處理Ajax的時候,就會當做一個普通的中文文書處理,不會因為出現~`[email protected]#$%^&*()_+-={}|[]\:"<>?;‘,./這些奇奇怪怪的英文符號截斷提交的ActionURL的情況!

【JavaScript】使用get方法提交Ajax之前對於某些符號的處理方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.