欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

AJAX POST數(shù)據(jù)中有特殊符號(hào)(轉(zhuǎn)義字符)導(dǎo)致數(shù)據(jù)丟失的解決方法

 更新時(shí)間:2023年06月06日 00:35:29   作者:一本書(shū)的傷痕  
這篇文章主要介紹了Ajax發(fā)送轉(zhuǎn)義字符 、>、<、"接收數(shù)據(jù)不全問(wèn)題,需要的朋友可以參考下

使用Ajax傳送數(shù)據(jù)時(shí),當(dāng)數(shù)據(jù)中存在加號(hào)(+)、連接符(&)或者百分號(hào)(%)時(shí),服務(wù)器端接收數(shù)據(jù)時(shí)會(huì)丟失數(shù)據(jù)。分析Ajax傳送數(shù)據(jù)的格式與Javascript的語(yǔ)法:

1. "+"號(hào):JavaScript解析為字符串連接符,所以服務(wù)器端接收數(shù)據(jù)時(shí)"+"會(huì)丟失變空格。

2. "&"號(hào):JavaScript解析為變量連接符,所以服務(wù)器端接收數(shù)據(jù)時(shí)&符號(hào)以后的數(shù)據(jù)都會(huì)丟失變空格。

解決方法是通過(guò)正則表達(dá)式進(jìn)行編碼替換(假設(shè)postStr是你想通過(guò)ajax傳送的數(shù)據(jù)字符串)

postStr = postStr.replace(/%/g, "%25"); 
postStr = postStr.replace(/\&/g, "%26"); 
postStr = postStr.replace(/\+/g, "%2B"); 

下面是其它網(wǎng)友的補(bǔ)充

今天用ckEditor4編輯器時(shí),把編輯器里面的內(nèi)容通過(guò)Ajax傳到后端的時(shí)候,居然發(fā)現(xiàn)后端接收的數(shù)據(jù)不完整,以下我編輯器內(nèi)容的源碼:

<p>
<img src="https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1483731740,4186543320&amp;fm=26&amp;gp=0.jpg"/>
</p>

結(jié)果“4186543320”后面的內(nèi)容就一直沒(méi)有收到。

原因:

通過(guò)網(wǎng)絡(luò)查資料,得到的原因是分號(hào)”;”導(dǎo)致的問(wèn)題。

ajax傳輸以“;”分割的字符串,卻發(fā)現(xiàn)后臺(tái)只會(huì)接受到第一個(gè)字符串。

例如:我向后臺(tái)傳輸

“小明;小紅;小白”

后臺(tái)只會(huì)接收到小明。

經(jīng)過(guò)我的親自測(cè)試,發(fā)現(xiàn):

1、Ajax傳的字符串?dāng)?shù)據(jù),javascript用console.log可以完整的輸出來(lái),只是后端接收不全,例如:

2、Ajax傳的字符串?dāng)?shù)據(jù),我直接傳分號(hào)”;”+其它正常數(shù)據(jù),后臺(tái)一樣是可以接收到的,一點(diǎn)問(wèn)題都沒(méi)有。

根本原因是:

ajax請(qǐng)求內(nèi)容中包含一些HTML轉(zhuǎn)義字符,例如:

&nbsp; &gt; &lt; &amp; &quot;

最主要的是這些轉(zhuǎn)義字符中含有&。

例如:

如果我發(fā)送“ blablabla&ltgrogrogro”,則服務(wù)器僅收到“ blablabla”。

&在URL參數(shù)中是什么意思?

我相信做過(guò)web程序開(kāi)發(fā)的人都知道:&代表數(shù)據(jù)查詢(xún)字符串中的另一個(gè)變量,&以此格式表示新參數(shù)的開(kāi)始。

最后去看了一下“ckEditor4編輯器”,無(wú)論是為空字符串還是回車(chē),都會(huì)自動(dòng)的幫你進(jìn)行HTML轉(zhuǎn)義,哪怕你配置了“不轉(zhuǎn)義HTML”參數(shù),也會(huì)自動(dòng)幫你轉(zhuǎn)。

解決方法

知道了上面的原因,解決方法就容易大了,有程序經(jīng)驗(yàn)的人已經(jīng)知道怎么做了?

原理就是:把HTML轉(zhuǎn)義字符解碼成標(biāo)簽或者編碼再傳送數(shù)據(jù)。

以我這里用“ckEditor4編輯器”為例子,只需要修改config.js,增加如下配置參數(shù):

config.basicEntities = false; config.htmlEncodeOutput = false;

以上這種也有一個(gè)弊端,如果你的編輯器里面有“代碼塊“功能,要插入一些代碼,例如:PHP、java、python、c++.......等等。代碼塊這里同樣也會(huì)自動(dòng)進(jìn)行HTML字符轉(zhuǎn)義。

最終的解決方法:

1、ajax請(qǐng)求傳字符串?dāng)?shù)據(jù)的時(shí)候,我們先做JavaScript URL編碼,例如:

var contents = encodeURIComponent(document.getElementById( 'editor1' ).value);

編碼函數(shù):encodeURIComponent()

解碼函數(shù):decodeURIComponent()

注意:用此編碼函數(shù),Asp與PHP處理后端的時(shí)候不需要解碼,會(huì)自動(dòng)的相互通訊,自動(dòng)解碼。

編碼:encodeURI()

解碼:decodeURI()

注意:用此編碼函數(shù),后端處理必須先解碼。

2、后端接收數(shù)據(jù)的時(shí)候,我們要做一個(gè)URL解碼,以PHP為例子,例如:

$contents = htmlentities(urldecode($_POST['contents']),ENT_QUOTES);

urldecode() — 解碼

urlencode() — 編碼

注意:為了安全起見(jiàn),不管前端用哪個(gè)函數(shù)?只要是URL編碼過(guò)的,后端都需要解碼,好兼容。

其它解決方法:

Ajax請(qǐng)求傳數(shù)據(jù)類(lèi)型,可以改為:json、text。具體請(qǐng)參考:HTTP Content-type 類(lèi)型

總結(jié):

這個(gè)問(wèn)題其實(shí)解決方法真的是太多了,我只是講了最簡(jiǎn)單也是最常見(jiàn)的幾種吧!

到此這篇關(guān)于AJAX POST數(shù)據(jù)中有特殊符號(hào)(轉(zhuǎn)義字符)導(dǎo)致數(shù)據(jù)丟失的解決方法的文章就介紹到這了,更多相關(guān)AJAX POST數(shù)據(jù)丟失內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • AJAX跨域請(qǐng)求獲取JSON數(shù)據(jù)的實(shí)現(xiàn)方法

    AJAX跨域請(qǐng)求獲取JSON數(shù)據(jù)的實(shí)現(xiàn)方法

    我們都知道,由于受到瀏覽器的限制,AJAX?是不允許跨域請(qǐng)求,不過(guò)可以通過(guò)使用?JSONP?來(lái)實(shí)現(xiàn),本文介紹了?JSONP?的是怎么在?jQuery,MooTools?的,Dojo?Toolkit?中實(shí)現(xiàn)的,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • AJAX的阻塞及跨域名解析

    AJAX的阻塞及跨域名解析

    AJAX的阻塞及跨域名解析...
    2007-07-07
  • Ajax帶提示的驗(yàn)證表單實(shí)例

    Ajax帶提示的驗(yàn)證表單實(shí)例

    這篇文章主要介紹了Ajax帶提示的驗(yàn)證表單,可實(shí)現(xiàn)對(duì)表單輸入進(jìn)行實(shí)時(shí)提示的功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-08-08
  • Ajax添加數(shù)據(jù)與刪除篇實(shí)現(xiàn)代碼

    Ajax添加數(shù)據(jù)與刪除篇實(shí)現(xiàn)代碼

    Hello 大家好!這個(gè)ajax系列教程講到這里已經(jīng)完成50%了.第4篇講了ajax向數(shù)據(jù)庫(kù)添加數(shù)據(jù),第5篇講了ajax修改數(shù)據(jù)庫(kù)中的數(shù)據(jù).今天我們來(lái)講ajax添加數(shù)據(jù)與刪除并存的實(shí)例效果.
    2010-10-10
  • ajax中的async屬性值之同步和異步及同步和異步區(qū)別

    ajax中的async屬性值之同步和異步及同步和異步區(qū)別

    在Jquery中ajax方法中async用于控制同步和異步,當(dāng)async值為true時(shí)是異步請(qǐng)求,當(dāng)async值為fase時(shí)是同步請(qǐng)求。ajax中async這個(gè)屬性,用于控制請(qǐng)求數(shù)據(jù)的方式,默認(rèn)是true,即默認(rèn)以異步的方式請(qǐng)求數(shù)據(jù)。
    2015-10-10
  • JQuery+Ajax+Struts2+Hibernate框架整合實(shí)現(xiàn)完整的登錄注冊(cè)

    JQuery+Ajax+Struts2+Hibernate框架整合實(shí)現(xiàn)完整的登錄注冊(cè)

    最近沒(méi)有項(xiàng)目做,閑著沒(méi)事,看到一個(gè)書(shū)城的網(wǎng)站很好,于是就是仿了一個(gè),把里面的ui直接拿過(guò)來(lái)用,前端后端自己寫(xiě)的,目前大部分的功能已經(jīng)實(shí)現(xiàn)了。
    2015-10-10
  • Ajax 生成流文件下載(實(shí)現(xiàn)代碼)

    Ajax 生成流文件下載(實(shí)現(xiàn)代碼)

    使用Ajax生成流文件下載的功能,可以使用隱藏form的方式。需要的朋友可以參考下
    2013-07-07
  • asp.net jquery+ajax異步刷新實(shí)現(xiàn)示例

    asp.net jquery+ajax異步刷新實(shí)現(xiàn)示例

    異步刷新想必大家并不陌生吧,本文主要為大家介紹下asp.net jquery+ajax實(shí)現(xiàn)異步刷新過(guò)程,感興趣的朋友可以參考下
    2013-09-09
  • HTTP報(bào)文及ajax基礎(chǔ)知識(shí)

    HTTP報(bào)文及ajax基礎(chǔ)知識(shí)

    客戶(hù)端傳遞給服務(wù)器的內(nèi)容 和 服務(wù)器傳遞給客戶(hù)端的內(nèi)容 都屬于HTTP報(bào)文。Ajax是客戶(hù)端JS中的方法,用來(lái)向服務(wù)端發(fā)送請(qǐng)求,下面通過(guò)本文給大家分享HTTP報(bào)文及ajax基礎(chǔ)知識(shí),感興趣的朋友一起看看吧
    2017-08-08
  • ajax同步異步簡(jiǎn)單實(shí)現(xiàn)

    ajax同步異步簡(jiǎn)單實(shí)現(xiàn)

    本文為大家介紹下ajax同步異步的簡(jiǎn)單實(shí)現(xiàn),感興趣的朋友可以參考下
    2014-01-01

最新評(píng)論