正しい方向に進む前に、まず JavaScript の特殊文字を紹介しましょう
JavaScript でバックスラッシュを使用して、テキスト文字列に特殊文字を追加できます。
特殊文字の挿入
バックスラッシュは、テキスト文字列に省略記号、改行、引用符、その他の特殊文字を挿入するために使用されます。
以下の JavaScript コードを参照してください:
var txt="We are the so-called "Vikings" from the north." document.write(txt)
JavaScript では、文字列の開始または終了に一重引用符または二重引用符が使用されます。これは、上記の文字列が次のように切り詰められることを意味します。
この問題を解決するには、「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!
次の表は、バックスラッシュを使用してテキスト文字列に追加できる残りの特殊文字を示しています。
コード | 出力 |
---|---|
' | 一重引用符 |
" | 二重引用符 |
& | アンパサンド |
\ | バックスラッシュ |
ん | 改行 |
r | キャリッジリターン文字 |
t | タブ |
b | バックスペース文字 |
f | ページフィード |
背景:
今日タスクを実行しているときに、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){ } })