突发奇想,我的文章内容在正常访问的时候是可以看到正常效果的,而我让用户查看源代码的时候就是一团乱码。
于是我想到了javascript的escape,但是这样一样,必须要在网页输出的时候就要被加密了的。在客户端 再用javascript的unescape的函数解回。
大概做了个页面如下
function.php
- function escape($str){
- preg_match_all( "/[/x80-/xff].|[/x01-/x7f]+/ ",$str,$newstr);
- $ar = $newstr[0];
- foreach($ar as $k=> $v){
- if(ord($ar[$k])> =127){
- $tmpString=bin2hex(iconv( "GBK ", "ucs-2 ",$v));
- if (!eregi( "WIN ",PHP_OS)){
- $tmpString = substr($tmpString,2,2).substr($tmpString,0,2);
- }
- $reString.= "%u ".$tmpString;
- } else {
- $reString.= rawurlencode($v);
- }
- }
- return $reString;
- }
- function unescape($str) {
- $str = rawurldecode($str);
- preg_match_all( "/(?:%u.{4})|&#x.{4};|&#/d+;|.+/U ",$str,$r);
- $ar = $r[0];
- foreach($ar as $k=> $v) {
- if(substr($v,0,2) == "%u "){
- if (!eregi( "WIN ",PHP_OS)){
- $tmpString = "%u ".substr($v,4,2).substr($v,2,2);
- }
- $ar[$k] = iconv( "UCS-2 ", "GB2312 ",pack( "H4 ",substr($tmpString,-4)));
- }
- elseif(substr($v,0,3) == "&#x ")
- $ar[$k] = iconv( "UCS-2 ", "GB2312 ",pack( "H4 ",substr($v,3,-1)));
- elseif(substr($v,0,2) == "&# ") {
- $ar[$k] = iconv( "UCS-2 ", "GB2312 ",pack( "n ",substr($v,2,-1)));
- }
- }
- return join( " ",$ar);
- }
test.php
- document.write(unescape('<?php echo escape('我是一个中国人,我为我是中国人而自豪。你想看我的源代码吗?那就看吧。');?>'));
当然了,这个加密是可以轻松被破解的。只是让普通用户无法获取我的源代码。
在我省略了页面控制部分。希望大家理解。