fromCharCode vs chr
echo off
set "fn=%*"
set php=d:/www/php5/php.exe
cls
echo.
%php% %fn%
pause>null
====================
JS 默认编码是 UTF-16 ,PHP 中对数据的处理编码是 UTF-8 ,对 ASCII 无所谓,但对汉字就影响大了,所以必须做转码
<?php$encKey="12";
$str="1234abcASDF/?廣告服務 风《》<>您好";
echo 'PHP:'.$str."\r\n<br>";
$str=utf82Unicode($str);
$ex=encrypt_string($str);
function encrypt_string($input)
{
global $encKey;
$line = "";
for($i = 0; $i < strlen($input); $i++) {
$line .= chr(ord($input[$i]) + $encKey);//ord()返回字符的 ASCII 值。十进制
} //chr()从指定的 ASCII 值返回字符。
return $line;
}
function deccrypt_string($input)
{
global $encKey;
$line = "";
for($i = 0; $i < strlen($input); $i++){
$line .= chr(ord($input[$i]) - $encKey);
}
return $line;
}
function Unicode2Utf8($str){
preg_match_all("/(\d{2,5})/", $str,$a);
$a = $a[0];
$utf = '';
foreach ($a as $dec){
if ($dec < 128) {
$utf .= chr($dec);
} else if ($dec < 2048) {
$utf .= chr(192 + (($dec - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
} else {
$utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
}
return $utf;
}
function utf82Unicode($str=""){
$unicode = array();
$values = array();
$lookingFor = 1;
for ($i = 0; $i < strlen($str); $i++ ) {
$thisValue = ord($str[$i]);
if ($thisValue < 128) {
$unicode[] = $thisValue;
} else {
if ( count( $values ) == 0 ) {
$lookingFor = ( $thisValue < 224 ) ? 2 : 3;
}
$values[] = $thisValue;
if ( count( $values ) == $lookingFor ) {
$number = ( $lookingFor == 3 ) ?
( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ):
( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 );
$unicode[] = $number;
$values = array();
$lookingFor = 1;
}
}
}
$return = '';
foreach($unicode as $val){
$return .= '&#'.$val.';';
}
return $return;
}
?>
JS:
<script>
var e="<? echo $ex; ?>";
var s= decrypt_string(e);
document.write(s);
function decrypt_string(estr){
var key = 12;
var str="";
var n = estr.length;
var i;
for(i=0; i<n; i++) {
dstr =estr.charCodeAt(i) - key;
str+=String.fromCharCode(dstr);
}
return str;
}
</script>