>  기사  >  백엔드 개발  >  Escape는 무엇을 의미합니까? PHP에서 Javascript의 escape() 함수 코드를 구현합니까?

Escape는 무엇을 의미합니까? PHP에서 Javascript의 escape() 함수 코드를 구현합니까?

PHP中文网
PHP中文网원래의
2016-07-29 08:43:281391검색

Javascript에서는 간단한 트랜스코딩을 위해 escape/unescape() 및 eval_r() 함수를 사용하여 일반 URL을 이상하게 보이게 만들어 성가신 검색 크롤러가 숨기려는 리소스를 인식할 수 없도록 할 수 있습니다.

여기서 일반적으로 일반 문자열을 JavaScript unescape() 함수로 해석할 수 있는 형식으로 사전 인코딩해야 합니다. PHP를 예로 들면 다음 함수를 사용하여 동일한 결과를 얻을 수 있습니다. 함수를 Javascript의 escape() 함수로 사용하세요:

코드는 다음과 같습니다:

<?php 
function escapeToHex($string, $encoding = UTF-8) { 
$return = ; 
for ($x = 0; $x < mb_strlen($string, $encoding); $x ++) { 
$str = mb_substr($string, $x, 1, $encoding); 
if (strlen($str) > 1) { // 多字节字符 
$return .= %u . strtoupper(bin2hex(mb_convert_encoding($str, UCS-2, $encoding))); 
} else { 
$return .= % . strtoupper(bin2hex($str)); 
} 
} 
return $return; 
} 
?>


다음 주소를 숨기고 싶다고 가정합니다: http:// www.php.cn/
이를 달성하기 위해 다음 스크립트를 사용할 수 있습니다.

코드는 다음과 같습니다.

<?php 
// 请自行包含 escapeToHex() 函数定义 
$test = document.write(\<a href="http://www.dirk.sh/assets/uploaded/thisistest.pdf">test</a>\); 
echo <script Language="Javascript">eval_r(unescape(" . escapeToHex($test) . "))</script>; 
?>


페이지 소스 코드를 보면 알 수 있습니다(너무 길기 때문에 수동 분기를 수행하기 때문에 실제 실행 결과는 완전한 라인이어야 합니다):

코드는 다음과 같습니다.

<script Language="Javascript">eval_r(unescape("%64%6F%63%75%6D%65%6E%74%2E%77 \ 
%72%69%74%65%28%27%3C%61%20%68%72%65%66%3D%22%68%74%74%70%3A%2F%2F%77%77%77 \ 
%2E%64%69%72%6B%79%65%2E%6E%65%74%2F%75%70%6C%6F%61%64%65%64%2F%74%68%69%73 \ 
%69%73%74%65%73%74%2E%70%64%66%22%3E%74%65%73%74%3C%2F%61%3E%27%29"))</script>


브라우저에 표시되는 페이지는 일반 HTML과 다르지 않습니다.
참고:
1. escapeToHex() 함수의 두 번째 매개변수($encoding)는 전달하는 문자열의 인코딩을 나타냅니다. 기본값은 UTF-8입니다.
2. ECMAScript v3 사양에서는 unescape() 사용이 더 이상 사용되지 않습니다. 사양에서는 새로운 대체 함수 decodeURIComponent() 사용을 권장하지만 테스트를 통해 decodeURIComponent() 함수가 다중을 지원하지 않는다는 것을 발견했습니다. -바이트 문자(중국어).) 처리 문제가 있어 unescape() 함수가 계속 사용됩니다.
3. 원칙적으로 위의 방법은 기밀로 유지되어야 한다고 생각되는 리소스 주소를 검색 크롤러가 얻는 것을 방지하기 위한 것입니다. Javascript를 지원하는 브라우저에서 페이지를 탐색할 때 이 보호 메커니즘 없이 표시되는 렌더링은 다음과 같습니다. 완전히 다릅니다.

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