【问题标题】:Converting this simple Javascript into PHP将这个简单的 Javascript 转换为 PHP
【发布时间】:2014-01-14 02:35:26
【问题描述】:
var b=new Array(102,50,57,101,52,55,53,54,49,57,55,97,100,55,52,99,48,56,53,100,55,97,98,53,101,101,102,100,49,49,101,54,50,97,100,48,97,101,49,52,38,104,61,50,52,61,56,55,101,99,102,110,111,51,55,78,109,114,111,57,101,54,102,51,101,38,101,56,54,56,53,53,54,54,53,51,56,102,57,54,52,61,100,101,50,57,49,99,105,50,102,95,116,54,102,101,115,51,105,100,48,108,116,57,105,104,54,63,48,112,104,112,48,46,121,116,110,117,111,98);
var p=new Array(0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1);         
function c(b,p) {
    a='';s=String.fromCharCode;
    for(i=0;i<b.length;i++) {if(p[i])a=s(b[i])+a;else a+=s(b[i]);}
    return a;
}

我正在尝试将上面的 JavaScript 代码转换为 PHP,但是因为在某些方面它被压缩以使其更加混乱,所以我遇到了很大的困难。非常感谢您的帮助!

更新:这是我尝试过的:

<?php
          $b=array(102,50,57,101,52,55,53,54,49,57,55,97,100,55,52,99,48,56,53,100,55,97,98,53,101,101,102,100,49,49,101,54,50,97,100,48,97,101,49,52,38,104,61,50,52,61,56,55,101,99,102,110,111,51,55,78,109,114,111,57,101,54,102,51,101,38,101,56,54,56,53,53,54,54,53,51,56,102,57,54,52,61,100,101,50,57,49,99,105,50,102,95,116,54,102,101,115,51,105,100,48,108,116,57,105,104,54,63,48,112,104,112,48,46,121,116,110,117,111,98);
          $p=array(0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1);     
$a='';
class String {
    public static function fromCharCode() {
        return array_reduce(func_get_args(),function($d,$e){$d.=chr($e);return $d;});
    }
}
for($i=0;$i<b.length;$i++) {if($p[$i])$a=String::fromCharCode($b[$i]) . $a;else $a+=String::fromCharCode($b[$i]);}
echo $a; ?>

返回空白。

如何将这个简单的 Javascript 转换为 PHP?

【问题讨论】:

  • 向我们展示您的尝试
  • 我不是 javascript 方面的专家,但您的 fromCharCode 方法中不应该有一些变量吗?另外,您介意解释一下if(p[i])a=s(b[i])+a;else a+=s(b[i]); 的作用吗?
  • @Huey 是的。这是一个数组。我会在答案中提供。此外,我不知道它是什么链接到网页。
  • 相信你可以把fromCharCode()方法换成PHP的chr()

标签: javascript php if-statement


【解决方案1】:

最好的方法是使用chr

chr — 返回一个特定的字符

$b = array(102,50,57,101,52,55,53,54,49,57,55,97,100,55,52,99,48,56,53,100,55,97,98,53,101,101,102,100,49,49,101,54,50,97,100,48,97,101,49,52,38,104,61,50,52,61,56,55,101,99,102,110,111,51,55,78,109,114,111,57,101,54,102,51,101,38,101,56,54,56,53,53,54,54,53,51,56,102,57,54,52,61,100,101,50,57,49,99,105,50,102,95,116,54,102,101,115,51,105,100,48,108,116,57,105,104,54,63,48,112,104,112,48,46,121,116,110,117,111,98);
$p = array(0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1);         

function c($b,$p) {
    $a='';
    for($i=0;$i<count($b);$i++){
        if($p[$i]){
            $a=chr($b[$i]) . $a;
        }else{
            $a.=chr($b[$i]);
        }
    }
    return $a;
}

echo(c($b,$p));

输出

bounty.php?hitlist_id=9366558&formNonce=e0d2fe5b7d80c47a1654f29e797d5aed11e6aa14&h=2487f379e63ee6858f64e291c2f6fe3d09600

JS 和 PHP 中的两个例子输出相同。

工作示例 php:example

工作示例 js:example

【讨论】:

    【解决方案2】:

    未测试。只是直译

    function c($b, $p){
     $a="";
     for ($i=0;$i<strlen($b);$i++){
       if ($p[$i]) $a=chr($b[$i]).$a; else $a.=chr($b[$i]);
     }
     return $a;
    }
    

    【讨论】:

      【解决方案3】:

      在 PHP 中

      function c($b,$p){
          $a = '';
          $s = chr();
          for($i=0;$i<strlen($b);$i++){
              if($p[$i]){
                  $a = chr($b[$i]).$a;
              } else {
                  $a .= chr($b[$i]);
              }
          }
          return $a;
      }
      

      注意:你应该给你的变量提供更多描述性的名字

      【讨论】:

        【解决方案4】:

        我用于这种 hack 的另一种方法是通过 PHP 动态编写 javascript 脚本,但通过带有内容类型标识符的 http 标头将其回显。如下所示:

        index.html:

        <script type="text/javascript" src="js.php"></script>
        

        js.php

        <?php
        $js = <<<JS
        ///BEGIN JS SCRIPT //
        var b=new Array(102,50,57,101,52,55,53,54,49,57,55,97,100,55,52,99,48,56,53,100,55,97,98,53,101,101,102,100,49,49,101,54,50,97,100,48,97,101,49,52,38,104,61,50,52,61,56,55,101,99,102,110,111,51,55,78,109,114,111,57,101,54,102,51,101,38,101,56,54,56,53,53,54,54,53,51,56,102,57,54,52,61,100,101,50,57,49,99,105,50,102,95,116,54,102,101,115,51,105,100,48,108,116,57,105,104,54,63,48,112,104,112,48,46,121,116,110,117,111,98);
        
        var p=new Array(0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1);
        
        function c(b,p) {
        a='';
        s=String.fromCharCode;
        for(i=0;i<b.length;i++) {if(p[i])a=s(b[i])+a;else a+=s(b[i]);}
        return a;
        }
        
        /// END JS SCRIPT //
        JS;
        header("Content-type: text/javascript");
        echo $js;
        exit();
        ?>
        

        我发现这种方法的一个挫折是,如果您想在后面的脚本行中从 html 重新访问这些变量,则无法缓存该脚本。但是,它对我在“幕后”工作的一些实施大有裨益。

        【讨论】:

          猜你喜欢
          • 2013-01-17
          • 2016-07-10
          • 1970-01-01
          • 1970-01-01
          • 2011-01-13
          • 1970-01-01
          • 2013-01-19
          • 2012-10-01
          • 1970-01-01
          相关资源
          最近更新 更多