PHP---ajax傳遞POST值(包含html標記)到提交頁面資料遺失或亂碼

WBOY
發布: 2016-07-29 09:15:17
原創
1799 人瀏覽過

問題

??透過取得文字編輯器中的內容(一個html文字),然後採用ajax透過POST將文字內容傳遞到後台,儲存為xxx.html文件,但是到瀏覽器中去開啟這個檔案會出現資料遺失或亂碼。

原因

??這是因為文本中帶了html標記,在用POST傳遞值的時候,值的內容中帶了'&'等一些字符會影響變量的值的提取,導致亂碼或者丟失數據。

解決方法

??將待傳遞的html文字內容編碼,然後傳遞過去。再透過瀏覽器的自動解碼即可。

編碼函數

??encodeURIComponent() 函數可把字串當作 URI 元件來編碼。此方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ’ ( ) 。
其他字元(例如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進位的轉義序列取代的。如果 URI 元件中含有分隔符,例如 ? 和 #,則應使用 encodeURIComponent() 方法分別對各元件進行編碼,其他則可以使用encodeURI(URIstring)函數來編碼。

<code><span>var</span> content = UM.getEditor(<span>'myEditor'</span>).getAllHtml();
<span>/*对待传递的值的内容进行编码*/</span><span>var</span> htmlcontent = <span>encodeURIComponent</span>(content);
alert(htmlcontent);
<span>var</span> postStr = <span>'news_title='</span> + news_title +<span>'&htmlc/span> + htmlcontent + <span>'&sid='</span>+<span>Math</span>.random();
alert(postStr);
ajax(<span>"../news_submit_hand.php"</span>,postStr,<span><span>function</span><span>(result)</span>{</span><span>if</span>(result == <span>'submit_success'</span>){
        alert(<span>"新闻提交成功!请通过右上角的关闭按钮来关闭编辑器。"</span>);          
    }
    <span>else</span> {
        alert(<span>"新闻提交出错!"</span>);            
    }      
});</span></code>
登入後複製

編碼之後還需要解決的問題

??新聞提交中傳進了一個標題,要將標題插入到html文本內容的正文之前,則需要在標記的後面插入標題。此時編碼後變為了%3Cbody%3E。則有解決思路:
??先透過%3Cbody%3E字串從指定位置處將原字串分割成兩個字串,然後再將分割的前半部分字串+待插入的字串+後半部字串,形成新的字串,這樣就實現了功能;
??程式碼實作:

<code><span><span>function</span><span>str_insert</span><span>(<span>$str</span>, <span>$i</span>, <span>$substr</span>)</span>
{</span><span>for</span>(<span>$j</span>=<span>0</span>; <span>$j</span><<span>$i</span>; <span>$j</span>++){
     <span>$startstr</span> .= <span>$str</span>[<span>$j</span>];
}
<span>for</span> (<span>$j</span>; <span>$j</span><strlen(<span>$str</span>); <span>$j</span>++){
    <span>$laststr</span> .= <span>$str</span>[<span>$j</span>];
}
    <span>$str</span> = (<span>$startstr</span> . <span>$substr</span> . <span>$laststr</span>);
    <span>return</span><span>$str</span>;
} 


<span>$myfile</span> = fopen(<span>$news_path</span>, <span>"w"</span>);
<span>if</span>(<span>'FALSE'</span> == <span>$myfile</span>)<span>echo</span><span>'error'</span>;
<span>/*处理新闻标题等信息*/</span><span>//待插入的html代码</span><span>$insert_html</span> = <span>"<div><h3 style=\"text-align:center;\">". <span>$news_title</span> . <span>"</h3><div style=\"text-align:center;width:100%;font-size:8px;color:#A9A9A9;\"><span>发布者:admin</span>  <span>发布日期:"</span>. date(<span>"Y-m-d H:i:s"</span>,<span>$timestamp</span>) .<span>"</span></div></div><hr style=\"border:1px dashed #000; height:1px\">"</span>;

<span>$first_pos</span> = stripos(<span>$htmlcontent</span>, <span>"%3Cbody%20%3E"</span>);
<span>$first_pos</span> += <span>13</span>;
<span>$content</span> =str_insert(<span>$htmlcontent</span>,<span>$first_pos</span>,<span>$insert_html</span>);

fwrite(<span>$myfile</span>, <span>$content</span>);
fclose(<span>$myfile</span>);</code>
登入後複製

版權聲明:本文為部落客[原創]文章,未經部落客允許可以轉載,註明部落格出處:[http://blog.csdn.net/FreeApe]

以上就介紹了PHP---ajax傳遞POST值(包含html標記)到提交頁面資料遺失或亂碼,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板