PHP---ajax传递POST值(包含html标记)到提交页面数据丢失或乱码
2015-09-15 10:29
615 查看
问题
通过获取文本编辑器中的内容(一个html文本),然后采用ajax通过POST将文本内容传递到后台,保存为xxx.html文件,但是到浏览器中去打开这个文件会出现数据丢失或者乱码。原因
这是因为文本中带了html标记,在用POST传递值的时候,值的内容中带了‘&’等一些字符会影响变量的值的提取,导致乱码或者丢失数据。解决办法
将待传递的html文本内容进行编码,然后传递过去。再通过浏览器的自动解码即可。编码函数
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码,其他则可以使用encodeURI(URIstring)函数来编码。
var content = UM.getEditor('myEditor').getAllHtml(); /*对待传递的值的内容进行编码*/ var htmlcontent = encodeURIComponent(content); alert(htmlcontent); var postStr = 'news_title=' + news_title +'&htmlcontent=' + htmlcontent + '&sid='+Math.random(); alert(postStr); ajax("../news_submit_hand.php",postStr,function(result){ if(result == 'submit_success'){ alert("新闻提交成功!请通过右上角的关闭按钮来关闭编辑器。"); } else { alert("新闻提交出错!"); } });
编码之后还需要解决的问题
新闻提交中传进了一个标题,要将标题插入到html文本内容的正文之前,则需要在标记的后面插入标题。此时编码后变为了%3Cbody%3E。则有解决思路:首先通过%3Cbody%3E字符串从指定位置处将原字符串分割成两个字符串,然后再将分割的前半部分字符串+待插入的字符串+后半部分字符串,形成新的字符串,这样就实现了功能;
代码实现:
function str_insert($str, $i, $substr) { for($j=0; $j<$i; $j++){ $startstr .= $str[$j]; } for ($j; $j<strlen($str); $j++){ $laststr .= $str[$j]; } $str = ($startstr . $substr . $laststr); return $str; } $myfile = fopen($news_path, "w"); if('FALSE' == $myfile)echo 'error'; /*处理新闻标题等信息*/ //待插入的html代码 $insert_html = "<div><h3 style=\"text-align:center;\">". $news_title . "</h3><div style=\"text-align:center;width:100%;font-size:8px;color:#A9A9A9;\"><span>发布者:admin</span> <span>发布日期:". date("Y-m-d H:i:s",$timestamp) ."</span></div></div><hr style=\"border:1px dashed #000; height:1px\">"; $first_pos = stripos($htmlcontent, "%3Cbody%20%3E"); $first_pos += 13; $content =str_insert($htmlcontent,$first_pos,$insert_html); fwrite($myfile, $content); fclose($myfile);
相关文章推荐
- 怎样把php数组转换成字符串,php implode()
- php设计模式之迭代器模式
- PHP如何识别系统语言或浏览器语言
- FTP 协议(指令集)
- yii执行流程.
- php读写json文件
- 我的PHP编程生涯一
- PHP实现短信验证码
- PHP于Post和Get得到的数据写入到文件中
- u-boot2010.06的移植(6)——支持yaffs下载
- 教你识别简单的免查杀PHP后门
- 整理php防注入和XSS攻击通用过滤
- PHP概率计算函数汇总
- [转] PHP在不同页面之间传值的三种常见方式
- php框架开发(好用的php原生模板引擎)1
- yii2.0使用插件实现一个简单的上传功能
- yii2.0给表单添加验证码的实现方法
- 在SAE上使用wx_sample.php获取token失败问题
- 关于如何使用thinkphp自带的分页功能
- laravel 多对多 belonsToMany