ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の 16 進文字 (改善)_JavaScript スキル

JavaScript の 16 進文字 (改善)_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 17:59:081099ブラウズ

元のコード:

コードをコピー コードは次のとおりです:

//テキストを 16 進数に変換します
function textToSix(str) {
returnscape(str).replace(/%/g, function () {
return "\";
}).toLowerCase(); }

改善:

コードをコピー コードは次のとおりです:
//テキストを 16 進数に変換します
function textToHex(str) {
//0 ~ 255 以外の Unicode 値をエンコードする場合、エスケープは %u**** 形式を出力します。例: % u6267% u624b%u6cea%u773c
//% を 16 進数に置き換えます
if (typeof str == "string") {
returnscape(str).replace(/ %/g, function () {
return "\";
}).toLowerCase();
} else {
return
}
}

主に検証を追加します文字列かどうかを確認します。

このメソッドを完成させた後、次のメソッドを改善する必要があると考えました:

コードをコピー コードは次のとおりです。
//16 進数をテキストとして表現します。
function sixToText(str) {
return unescape(str);


元の目的は、「unnn」などの文字をテキストに変換することです。実際、unescape メソッドの原理を見てください (動作原理: %xx および %uxxxx (x は 16 進数を表します) の形式の文字シーケンスを検索し、そのような文字シーケンスを Unicode 文字 u00xx および uxxxx デコードに置き換えます。百度百科事典より)。私がまったく不要であることがわかるでしょう。ブラウザは 16 進文字を解析できるためです。例:

IE9 の場合:


testChar2IE9 Chrome の場合:

testChar2Chrome さらに少しゲインを加えてみましょう。実際、置換した文字を解析するときの最初のアイデアは、「」文字を「%」に置き換えてから、エスケープ デコード関数を使用して文字を解析することでした。ところが、"" を "%" に置き換えたいと思ったとき、次のような興味深い現象を発見しました。文字 "" の後に "t" が続かない場合、エスケープを形成するために "n" を t と組み合わせることができます。文字を含む場合、ブラウザでは無視されます。私の結論を実験で検証してみましょう:

IE9 でのデバッグ:

testChar Chrome でのデバッグ:

testCharChrome ここでは変数が定義されています。変数には、通常ではまれに表示される文字「」が含まれています。ブラウザは、特別な位置にある文字をインテリジェントに無視します。そのため、一見普通に見える文字(ファイルパスなど)をjs変数に入れると、期待通りの出力結果が得られない場合があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。