PHP---ajax传递POST值(包含html标记)到提交页面数据丢失或乱码

php中文网
发布: 2016-07-29 09:15:17
原创
2219人浏览过

问题

??通过获取文本编辑器中的内容(一个html文本),然后采用ajax通过POST将文本内容传递到后台,保存为xxx.html文件,但是到浏览器中去打开这个文件会出现数据丢失或者乱码。

原因

??这是因为文本中带了html标记,在用POST传递值的时候,值的内容中带了‘&’等一些字符会影响变量的值的提取,导致乱码或者丢失数据。

解决办法

立即学习PHP免费学习笔记(深入)”;

小羊标书
小羊标书

一键生成百页标书,让投标更简单高效

小羊标书 62
查看详情 小羊标书

??将待传递的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>);            
    }      
});</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>. <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速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号