올바른 길을 가기 전에 먼저 JavaScript 특수 문자를 소개하겠습니다
JavaScript에서 백슬래시를 사용하여 텍스트 문자열에 특수 문자를 추가할 수 있습니다.
특수문자 삽입
백슬래시는 텍스트 문자열에 줄임표, 줄 바꿈, 따옴표 및 기타 특수 문자를 삽입하는 데 사용됩니다.
아래 JavaScript 코드를 참조하세요.
var txt="We are the so-called "Vikings" from the north." document.write(txt)
JavaScript에서 문자열은 작은따옴표나 큰따옴표를 사용하여 시작하거나 끝납니다. 이는 위의 문자열이 We are the 소위로 잘린다는 것을 의미합니다.
이 문제를 해결하려면 "Viking"의 따옴표 앞에 백슬래시()를 붙여야 합니다. 그러면 각 큰따옴표가 리터럴 문자열로 변환됩니다.
var txt="We are the so-called \"Vikings\" from the north." document.write(txt)
이제 JavaScript는 올바른 텍스트 문자열을 출력합니다. 우리는 소위 북쪽에서 온 "바이킹"입니다.
또 다른 예는 다음과 같습니다.
document.write ("You \& me are singing!")
위 예에서는 다음과 같은 출력이 생성됩니다.
You & me are singing!
다음 표에는 백슬래시를 사용하여 텍스트 문자열에 추가할 수 있는 나머지 특수 문자가 나열되어 있습니다.
코드 | 출력 |
---|---|
' | 작은따옴표 |
" | 큰따옴표 |
& | 앰퍼샌드 |
\ | 백슬래시 |
ㄴ | 줄바꿈 |
르 | 캐리지 리턴 캐릭터 |
아 | 탭 |
ㄴ | 백스페이스 문자 |
에프 | 페이지 피드 |
배경:
오늘 작업을 할 때 jquery의 ajax를 사용하여 긴 문자열을 전달할 때 백그라운드에서 확인이 항상 실패했습니다(문자열이 무작위로 생성되는 것이 특징입니다). 오전 내내 제가 생성한 문자열에 숫자가 있는 것으로 알고 있는데, js를 통해 전달되면 연결 문자로 이해가 되고, 그 숫자가 백그라운드에서 자동으로 공백으로 변경되므로 백그라운드에서 생성된 문자열은 프런트에서 생성된 문자열과 다릅니다.
이유:
js 뒤에는 특수 문자가 자동으로 구문 분석됩니다. 예를 들어 am은 커넥터이고 공백으로 구문 분석되며 &는 변수 커넥터이며 서버가 데이터를 수락하면 & 등 뒤에 데이터가 표시되지 않습니다.
해결책:
1. 양식에 문자를 넣은 다음 js를 사용하여 양식을 서버에 제출합니다.
2. 문자의 특수 문자를 16진수 문자로 바꾸세요. 일부 특수 문자와 16진수 문자 간의 대응:
우주 | / | ? | % | & | = | # | |
+ | / | ? | % | & | &3D | # |
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){ } })