차근차근/PHP

[함수] [1원팁] javascript escape/unescape -> php

예쁜꽃이피었으면 2014. 9. 2. 01:22

http://phpschool.com/link/tipntech/65180


다들 아시는 내용이겠지만..... 혹시나 모르시는 분들을 위해서 올립니다. 


javascript escape/unescape 를 php로 구현해놓은게 여기 스쿨의 팁텍에도 올라와 있는데요. 

http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=60918&sca=&sfl=wr_subject||wr_content&stx=unescape&sop=and 


'+'를 띄어쓰기로 변환하는 오류가 있고, 그밖에 영문까지 변환(변환해도 문제는 없습니다.)하는 현상이 있어서 다시 정리해 봤습니다. 


혹시 오류가 있으면 지적해 주세요.... 


<?php 

function js_escape($str, $chr_set='CP949') 

$arr_dec = unpack("n*", iconv($chr_set, "UTF-16BE", $str)); 

$callback_function = create_function('$dec', 'if(in_array($dec, array(42, 43, 45, 46, 47, 64, 95))) return chr($dec); elseif($dec >= 127) return "%u".strtoupper(dechex($dec)); else return rawurlencode(chr($dec));'); 

$arr_hexcode = array_map($callback_function, $arr_dec); 

return implode($arr_hexcode); 

function js_unescape($str, $chr_set='CP949') 

$callback_function = create_function('$matches, $chr_set="'.$chr_set.'"', 'return iconv("UTF-16BE", $chr_set, pack("n*", hexdec($matches[1])));'); 

return rawurldecode(preg_replace_callback('/%u([[:alnum:]]{4})/', $callback_function, $str)); 

$str = '?&=*+-./@_%abcd 한글'; 

$escape = js_escape($str); 

$unescape = js_unescape($escape); 

echo $str,' | ',$escape,' | ',$unescape,'<br>'; 

?> 

<script> 

document.write('?&=*+-./@_%abcd 한글 | '+escape('?&=*+-./@_%abcd 한글')+' | '+unescape('<?=$escape?>')); 

</script>


+)javascript escape는 '+'를 변환하지 않습니다. 

그러므로 unescape도 '+'를 변환하지 않아야되는데, 이전에 팁텍에 올라온 소스는 unescape시에 '+'를 공백으로 변환하는 오류가 있어요.

반응형