String.prototype.rot13 = function(){
    return this.replace(/[a-zA-Z]/g, function(c){
        return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);    });
};
请大侠帮忙告知这段代码是什么意思?(尤其是红色的部分)如果翻译成php应该怎么写?

解决方案 »

  1.   

    fromCharCode 方法
    从一些 Unicode 字符值中返回一个字符串。String.fromCharCode([code1[, code2[, ...[, codeN]]]])参数
    String必选项。为 String 对象。code1, . . . , codeN可选项。是要转换为字符串的 Unicode 字符值序列。如果没有给出参数,结果为空字符串。说明
    在调用 fromCharCode 前不必创建 String 对象。在下面的例子中,test 包含字符串 "plain": var test = String.fromCharCode(112, 108, 97, 105, 110);
      

  2.   

    charCodeAt 方法
    返回一个整数,代表指定位置上字符的 Unicode 编码。strObj.charCodeAt(index)参数
    strObj必选项。任何 String 对象或文字。index必选项。将被处理的字符的从零开始计数的编号。有效值为 0 到字符串长度减 1 的数字。
      

  3.   

    v=(c <= "Z" ? 90 : 122)三目运算.相当于if(c <= "Z"){
        v = 90
    }else{
        v = 122
    }
      

  4.   

    复合判断1判断变量c 和Z比较是否为true   true:返回90  否则返回122
    2变量c转化为字符编码+13
    90或122 与 编码比较  大 返回c  否则c-26
      

  5.   

    我把PHP写成这样 
    function rot($c)
    {
    $ci=$c <= "Z" ? 90 : 122;
    echo $c."     Z   ".$ci."<br>";
    $cx=ord($c)+13;

    if ($ci>=$cx)
    {
    $rti=ord($c);
    }
    else
    {
    $rti=ord($c)-26;
    }
    return chr($rti);

    }不知道错在哪里啊
      

  6.   

    (c <= "Z" ? 90 : 122)
    这一部分是说如果c是大写字母,则结果为90(Z的unicode字符值);
    如果是小写字母,则结果为122(z的unicode字符值)
      

  7.   

    String.prototype.rot13 = function() {
        return this.replace(/([a-mA-M])|([n-zN-Z])/g, function(a,b,c) {
    return String.fromCharCode( (b||c).charCodeAt(0) + (b?13:-13) );
        });
    };这就是个很简单的字符串转换方法
    alert('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.rot13());一运行就知道什么意思了 
      

  8.   


     <div>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>12</div>
     <div id="div1">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</div>
     <div id="div2"></div>
      <SCRIPT LANGUAGE="JavaScript">
      <!--
    String.prototype.rot13 = function(){
    return this.replace(/[a-zA-Z]/g, function(c){ 
    return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); });
    };
    div2.innerHTML = div1.innerHTML.rot13();
      //-->
      // "/[a-zA-Z]/g":正则表达式,匹配所有大小写的英文字母
      /*
    (c <= "Z" ? 90 : 122) => part1
    这一部分是说如果c是大写字母,则结果为90(Z的unicode字符值);
    如果是小写字母,则结果为122(z的unicode字符值) (c = c.charCodeAt(0) + 13) => part2
    这一段是说将c赋值为它本身unicode字符值+13的数值
    如果c="a"的话,赋值后c="n 的unicode字符值" part1 >= part2 ? c : c - 26
    这一段跟part1一样是三目运算,满足?前的条件则结果是c,否则结果是c-26
    最后这个数值作为 String.fromCharCode()的参数,返回一个字母 这段代码意思是说:
    字符串中字母向后推13位(part2的值),如果超过了z或Z(part1的值),那么就从a或A开始再算
    就是个不改变字母大小写的循环位移
      */
      </SCRIPT>能看懂了不?
    真够折腾的,我自己也算锻炼了