基于javascript如何传递特殊字符
投稿:mrr
在没步入正轨之前,先给大家介绍JavaScript 特殊字符
你可以在 JavaScript 中使用反斜杠来向文本字符串添加特殊字符。
插入特殊字符
反斜杠用来在文本字符串中插入省略号、换行符、引号和其他特殊字符。
请看下面的 JavaScript 代码:
var txt="We are the so-called "Vikings" from the north." document.write(txt)
在 JavaScript 中,字符串使用单引号或者双引号来起始或者结束。这意味着上面的字符串将被截为:We are the so-called。
要解决这个问题,就必须把在 "Viking" 中的引号前面加上反斜杠 (\)。这样就可以把每个双引号转换为字面上的字符串。
var txt="We are the so-called \"Vikings\" from the north." document.write(txt)
现在 JavaScript 就可以输出正确的文本字符串了:We are the so-called "Vikings" from the north。
这是另一个例子:
document.write ("You \& me are singing!")
上面的例子会产生以下输出:
You & me are singing!
下面的表格列出了其余的特殊字符,这些特殊字符都可以使用反斜杠来添加到文本字符串中:
代码 | 输出 |
---|---|
\' | 单引号 |
\" | 双引号 |
\& | 和号 |
\\ | 反斜杠 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\b | 退格符 |
\f | 换页符 |
背景:
今天在做一个任务时,用jquery的ajax传递一长串字符时,在后台地验证一直不成功,纠结时我了(那个字符串是随机生成地,特长).查了一上午,原来是我生成地字符串中有+号,而在js传递地时候,会理解为是连接字符用地,到了后台就将+号自动变为空格了,所以后台地字符串和前台生成地已经不一样了.
原因:
js后自动解析特殊字符,如+号为连接符,解析为空格,&为变量连接符,服务器端接受数据时&以后地数据不显示等等.
解决办法:
1、将字符放到form中,然后用js提交form表单到服务器.
2、将字符中地特殊字符替换成十六进制地字符,一些特殊字符与十六进制地对应关系:
+ | 空格 | / | ? | % | & | = | # |
%2b | %20 | %2f | %3f | %25 | %26 | &3d | %23 |
str = str.replace(/\+/g,%2b); 将+号替换为十六进制
3、最简单地一种,使用encodeuricomponent()函数.
该方法不会对 ascii 字母和数字进行编码,也不会对这些 ascii 标点符号进行编码: - _ . ! ~ * ' ( ) .
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 uri 组件地标点符号),都是由一个或多个十六进制地转义序列替换地.
jQuery ajax特殊字符参数
在做ajax登录时候遇到的一个问题,当传入参数含有特殊字符,比如:“$'#@”等。参数传递会有问题,无法正确获取。
$.ajax({ url: '/user/login.ydd', type:'post', data:'name=abce&password=abcd&pwd', success: function(data){ } })
我要传入的是用户名为:abc,密码为abcd&pwd的用户登录。但传入后台获取参数,会被password=abcd当作一个参数传递,&这个特殊将pwd分开了作为另一个参数解析了。
解决方法,这时候就需要ajax另外一种传递参数的方式
$.ajax({ url: '/user/login.ydd', type:'post', data:{'name':'abce','password':'abcd&pwd'}, success: function(data){ } })