js原文c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));function c_substr($string, $from, $length = null){//截取字符串
preg_match_all('/[\x80-\xff]?./', $string, $match);
if(is_null($length)){
$result = implode('', array_slice($match[0], $from));
}else{
$result = implode('', array_slice($match[0], $from, $length));
}
return $result;
}function unicode($code){//转换成unicode编码
preg_match_all("/[\x80-\xff]?./",$code,$ar);
$c='';
for($i=1;$i<count($ar);$i++){
$c=$c."&#".utf8_unicode(iconv("GB2312","UTF-8",$v)).";";
}
echo $c;
return $c;
}$codet=unicode($code);
for($i=1;$i<strlen($codet);$i++){
$c.=chr(ord(c_substr($codet,$i,abs($i-strlen($codet))))+ord(c_substr($codet,$i-1,abs($i-strlen($codet)))));
} 不知道哪里有错误,生成的值不一样
preg_match_all('/[\x80-\xff]?./', $string, $match);
if(is_null($length)){
$result = implode('', array_slice($match[0], $from));
}else{
$result = implode('', array_slice($match[0], $from, $length));
}
return $result;
}function unicode($code){//转换成unicode编码
preg_match_all("/[\x80-\xff]?./",$code,$ar);
$c='';
for($i=1;$i<count($ar);$i++){
$c=$c."&#".utf8_unicode(iconv("GB2312","UTF-8",$v)).";";
}
echo $c;
return $c;
}$codet=unicode($code);
for($i=1;$i<strlen($codet);$i++){
$c.=chr(ord(c_substr($codet,$i,abs($i-strlen($codet))))+ord(c_substr($codet,$i-1,abs($i-strlen($codet)))));
} 不知道哪里有错误,生成的值不一样
fromCharCode 方法
从一些 Unicode 字符值中返回一个字符串。
String.fromCharCode([code1[, code2[, ...[, codeN]]]])charCodeAt 方法
返回一个整数,代表指定位置上字符的 Unicode 编码。
strObj.charCodeAt(index)注意:这里的 Unicode 不是 utf-8 而是 UCS-2至于你的那两个函数因为太过老了,没有必要再使用了
mb 和 iconv 都提供了很好的多字节编码字符串的处理
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
return escape(c);
}function fromCharCode($code){
$c="&#".$code.";";
$c=iconv("UTF-8","GB2312",$c);
return $c;
}
function charCodeAt($code,$i){
preg_match_all("/[\x80-\xff]?./",$code,$ar);
$c='';
$c=utf8_unicode(iconv("GB2312","UTF-8",$ar[0][$i]));
return $c;
}function compile($code) {
//$codet=unicode($code);
$c=fromCharCode(charCodeAt($code,0)+mb_strlen ($code,'Gb2312'));
for($i=0;$i<mb_strlen ($code,'Gb2312');$i++){
$c.=fromCharCode(charCodeAt($code, $i+1)+charCodeAt($code, $i));
}
$c = escape($c);
return $c;}无论如何也不能做到等效。1.这个能实现不?2.我的代码哪里错了?
$code = array_values(unpack('n*', iconv(strlen('汉')==2 ? 'gbk' : 'utf-8', 'ucs-2', $code)));
$c[] = $code[0] + count($code);
for($i=1; $i<count($code); $i++){
$c[] = $code[$i] + $code[$i-1];
}
$r = '';
foreach($c as $v) {
if($v < 256) $r .= urlencode(chr($v));
else $r .= '%u' . strtoupper(dechex($v));
}
return $r;
}
对照 JS 函数function compile(code) {
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
return escape(c);
}