>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 16진수 문자(개선됨)_javascript 기술

JavaScript의 16진수 문자(개선됨)_javascript 기술

WBOY
WBOY원래의
2016-05-16 17:59:081203검색

원본 코드:

코드 복사 코드는 다음과 같습니다.

//텍스트를 16진수로 변환
function textToSix(str) {
return escape(str).replace(/%/g, function () {
return "\";
}).toLowerCase()
}

개선됨:
코드 복사 코드는 다음과 같습니다.

//텍스트를 16진수로 변환
function textToHex(str) {
//Escape는 0-255 이외의 유니코드 값을 인코딩할 때 %u**** 형식을 출력합니다. 예: % u6267% u624b%u6cea%u773c
//%를 16진수로 바꿉니다.
if (typeof str == "string") {
return escape(str).replace(/ %/g, function () {
return "\";
}).toLowerCase();
} else {
return null;
}

주로 확인을 추가합니다. 문자열인지 확인합니다.

이 방법을 완성한 후 다음 방법을 개선해야겠다는 생각이 들었습니다.

코드 복사 코드는 다음과 같습니다. 다음:
//16진수를 텍스트로 표시
function sixToText(str) {
return unescape(str)
}

원본 의도는 "unnn"과 같은 문자를 다시 텍스트로 변환하는 것입니다. 실제로 언스케이프 방법의 원리를 살펴보세요(작동 원리: %xx 및 %uxxxx(x는 16진수를 나타냄) 형식의 문자 시퀀스를 찾고 해당 문자 시퀀스를 유니코드 문자 u00xx 및 uxxxx 디코딩으로 대체합니다. 바이두 백과사전에서). 당신은 내가 완전히 불필요하다는 것을 알게 될 것입니다. 브라우저가 16진수 문자를 구문 분석할 수 있기 때문입니다. 예:

IE9의 경우:

testChar2IE9

Chrome에서:

testChar2Chrome

또 다른 작은 이득을 추가해 보겠습니다. 사실, 내가 대체한 문자를 구문 분석할 때 나의 초기 아이디어는 "" 문자를 다시 "%"로 대체한 다음 이스케이프 해제 디코딩 기능을 사용하여 문자를 구문 분석하는 것이었습니다. 그런데 ""를 "%"로 바꾸려고 했을 때 다음과 같은 흥미로운 현상을 발견했습니다. 문자 "" 뒤에 "t"가 없으면 "n"이 t와 결합되어 이스케이프를 형성할 수 있다는 것입니다. 문자는 브라우저에서 무시됩니다. 실험을 통해 내 결론을 확인해 보겠습니다.

IE9에서 디버깅:

testChar

Chrome에서 디버그:

testCharChrome

여기에 변수가 정의되어 있습니다. 이 변수에는 평소에는 거의 나타나지 않는 문자 ""가 포함되어 있습니다. 디버깅할 때 위의 프롬프트를 확인했습니까? 브라우저가 특수 위치의 문자를 지능적으로 무시합니다. 따라서, 겉보기에 평범해 보이는 문자(파일 경로 등)를 js 변수에 넣으면 출력 결과가 기대되지 않을 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.