JavaScript、Ajax
1. 回车问题JSON传值的时候,如果有回车符就会挂的。我们可以使用正则来去掉回车符:1$str = preg_replace(''([\r\n])[\s]+'', '', $str);23// 不用正则4$str = str_replace('\n','',$str);转出来的字符串就没有回车符的困扰了。顺便记录一个PHP过滤脚本:01]*?>.*?'si', // 去掉 javascript08 ''<[\/\!]*?[^<>]*?>'si', // 去掉 HTML 标记09 ''([\r\n])[\s]+'', // 去掉空白字符10 ''&(quot|#34);'i', // 替换 HTML 实体11 ''&(amp|#38);'i',12 ''&(lt|#60);'i',13 ''&(gt|#62);'i',14 ''&(nbsp|#160);'i',15 ''&(iexcl|#161);'i',16 ''&(cent|#162);'i',17 ''&(pound|#163);'i',18 ''&(copy|#169);'i',19 ''(\d+);'e'); // 作为 PHP 代码运行2021$replace = array ('',22 '',23 '\\1',24 '\'',25 '&',26 '<',27 '>',28 ' ',29 chr(161),30 chr(162),31 chr(163),32 chr(169),33 'chr(\\1)');3435$text = preg_replace ($search, $replace, $document);36
2. HTML特殊字符从服务器端以JSON格式将数据传递到客户端后,通过JS显示在HTML页面时,有一些特殊字符不能直接显示,如后台传递过来的是 'msg #' 通过JS显示在HTML页面中时,显示成了 msg # ,并不是msg #,这是由于<与>之间的内容看作是HTML标签了,而以&开头的 与#为HTML实体,所以显示不正常。解决办法很简单,在JS将其渲染到HTML页面前转换一下即可:01
3. escape()函数该函数可以处理空格、斜线和其他任何可能影响浏览器的内容,并将它们转换成 Web 可用字符(比如,空格会被转换成 %20,浏览器并不会将其视为空格处理,而是不做更改,将其直接传递到服务器)。之后,服务器会(通常自动)再把它们转换回它们传输后的本来 “面目”。1var url = 'nowamagic.php?people=' + escape(people.toJSONString());2request.open('GET', url, true);3request.onreadystatechange = updatePage;4request.send(null);这种做法的缺点有两个: 在使用 GET 请求发送大块数据时,对 URL 字符串有长度限制。虽然这个限制很宽泛,但对象的 JSON 字符串表示的长度可能超出您的想象,尤其是在使用极其复杂的对象时更是如此。在跨网络以纯文本发送所有数据的时候,发送数据面临的不安全性超出了您的处理能力。简言之,以上是 GET 请求的两个限制,而不是简单的两个与 JSON 数据相关的事情。在想要发送用户名和姓之外的更多内容,比如表单中的选择时,二者可能会需要多加注意。若要处理任何机密或极长的内容,可以使用 POST 请求。
4. 引号问题JSON中如果包含引号或双引号,会破坏JSON的格式。有两种方法可以解决。在入库的时候可以使用addslashes()函数处理一下字符串,给引号前加上斜杠。被改的字符包括单引号 (')、双引号 (')、反斜线 backslash (\) 以及空字符NULL。1$text = addslashes($text);JavaScript的话,可以这样:1function valueReplace(v){2v=v.toString().replace(new RegExp('(['\'])', 'g'),'\\\'');3 return v;4}5var eValue = encodeURI($.trim(valueReplace(e.value)))