1

我有一个 php 文件 index.php,其中包含下面的 jQuery/JavaScript 代码。该代码正在定义一个字符串,该字符串将在它被 ajaxed 到服务器后成为一个新的 PHP 文件。index.php 加载正常,直到我将 PHP 行放在第一个数组成员中。然后当我加载 index.php 我得到:

SyntaxError: <html xmlns="http://www.w3.org/1999/xhtml"><head>

由于 index.php 是一个正在运行的 PHP 文件,我知道我必须转义导入<<?php否则 PHP 处理器将跳入服务器。但显然我需要做的还不止这些。有谁知道我可以如何构造它以便加载 index.php 然后此代码<?php ?>作为无害的字符串传递?

$(function() {

var seg1 = ["\<?php phpinfo(); ?>\n",
    "<!doctype html>\n ",
    "<!-- HTML5  -->\n",
    "<html>\n",
    "<head>\n",
    "<meta charset='utf-8' />\n",
    "<title>MyPlace</title>\n" ,
    "<script src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'><\/script>\n",
    "<script src='//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js'><\/script>\n"
       ].join('');
}
4

1 回答 1

5

phpinfo()自己生成一个 HTML 页面,因此将它与另一个文档连接起来并不完全符合犹太教规。

也就是说,您可以首先使用输出缓冲来捕获输出,phpinfo()然后使用json_encode()它来正确转义它:

<?php

    ob_start();
    phpinfo();
    $info = ob_get_clean();

?>
$(function() {
    var seg1 = [<?php echo json_encode($info); ?>,
        "<!DOCTYPE html>\n" // etc etc
    ].join('');

更新

我误解了你的问题;您似乎允许在您的服务器上上传和执行任意 PHP 代码。这是非常危险的,我的第一个建议是基本上放弃这个想法

如果您仍然想摆脱困境,请按照以下方法:

var seg1 = ["<" + "?php phpinfo(); ?" + ">\n",
    "<!DOCTYPE html>\n" // etc etc
].join('');
于 2013-08-14T03:12:49.340 回答