将PHP数组转换为JS数组(无需编写内容)

时间:2011-08-27 14:46:35

标签: php javascript arrays

我有一个带有URL的PHP​​数组,我想保持隐藏(或者至少更难复制) 我需要将此数组转换为JS数组。 没有在JS中编写项目是否可能?

所以就像下面这个可以在源代码中找到URL的例子一样......

<?php
    $arr = array("http://foo.com","http://bar.com","http://baz.com"); 
?>

<script>
    var newArr = new Array("<?php echo implode(',' ,$arr); ?>");
</script>

8 个答案:

答案 0 :(得分:2)

不。如果不在JS中编写项目,这是不可能的。

答案 1 :(得分:2)

Javascript可以通过AJAX请求读取数据,它不会显示在页面源代码中,但您可以使用任何半开发的Web开发人员工具集来查看它。

答案 2 :(得分:0)

如果不在JS中编写项目,就无法做到这一点。但是,如果您使用这些变量进行验证,则可以在服务器上传输该验证并使用AJAX调用该验证。

答案 3 :(得分:0)

我不认为这是可能的,但是根据您要做的事情,您可以在完成后从DOM中删除脚本元素,因此它不会出现在您的源代码中用户。 这种技术非常有用,例如在构建其他人将在其网站上包含的javascript块时。 javascript代码可以运行,当它完成后从DOM中删除它,以便其他人无法复制你的代码。

答案 4 :(得分:0)

如果您希望系统的某个组件不接触某些数据,请不要为其提供数据。

但是,如果浏览器无法获取数据,则也无法使用它。有一个两难的境地......

也许你想插入一个额外的间接:让你的PHP为javascript GUI提供一系列'command-url',让它触发这些命令,而不是让它知道你的敏感数据。

答案 5 :(得分:0)

直接不可能。 JavaScript代码被解释,因此没有机会隐藏它。

另一种方法是对文件进行ajax调用,这将调用项目。

如果你希望更多的安全性使2 GET调用获得一些信息,用js处理它并在第二次调用时使用它来获得你的数组。像“默默无闻”或“时间”的方法。从理论上讲,这将增加一些保护。

或者作为无人suggested你可以再次使用2 GET技术,并对数组中的数据进行二进制编码和解码。这将增加更多安全性。

答案 6 :(得分:0)

如果你想让网址不可读,你可以将每个字符编码为\ xnn转义序列:

<?php
    $arr = array( "http://foo.com","http://bar.com","http://baz.com" ); 
    $encodedArr = array();
    foreach( $arr as $url ) {
        $encodedUrl = '';
        for( $i = 0; $i < strlen( $url ); ++$i ) {
            $encodedUrl .= '\\x'.str_pad( 
                  sprintf( '%x', ord( $url[$i] ) ),
                  2, STR_PAD_LEFT );
        }
        $encodedArr[] = '"'.$encodedUrl.'"';
    }
?>
<script type="text/javascript">
    var newArr = [ <?php echo implode(',' ,$encodedArr); ?> ];
    alert( newArr[0] );
</script>

书面的javascript将如下所示:

var newArr = [ "\x68\x74\x74\x70\x3a\x2f\x2f\x66\x6f\x6f\x2e\x63\x6f\x6d","\x68\x74\x74\x70\x3a\x2f\x2f\x62\x61\x72\x2e\x63\x6f\x6d","\x68\x74\x74\x70\x3a\x2f\x2f\x62\x61\x7a\x2e\x63\x6f\x6d" ];
alert( newArr[0] );

但会提醒http://foo.com

答案 7 :(得分:-2)

使用JSON。

在PHP中,那就是:

<?php
$arr    = array('http://[a]', 'http://[b]', 'http://[c]');

echo json_encode($arr);
JS中的

<script type="text/javascript">
arr[0]; // http://[a]

arr.each(function(k,v){
    v; // http://[a]

    // loops trough the remaining values
});