来自PHP的JavaScript转义字符

时间:2014-02-27 09:57:08

标签: javascript php

我有如下简单的脚本,

<?php

$actionbutton = '<input type="button" onclick="document.location.href=\'/backoffice_dev.php/currency/edit/EUR\';" value="Edit">';
$tr = '<tr><td>'.$addNewCurrencyPOST["id"].'</td>
<td><div class="led on"></div></td>
<td>'.$addNewCurrencyPOST["symbol"].'</td>
<td>'.$addNewCurrencyPOST["symbolhtml"].'</td>
<td>'.$addNewCurrencyPOST["usdrate"].'</td>
<td>'.$addNewCurrencyPOST["eurrate"].'</td>
<td>'.$actionbutton.'</td></tr>';

?>

<script>
    var tr = "<?php echo $tr ?>";
    console.log(tr);
</script>

但它在chrome中抛出了一个错误“Uncaught SyntaxError:Unexpected token ILLEGAL”。请注意,来自PHP的任何值都没有特殊字符。我在这个页面中使用了原型JS。这是导致这个问题吗?因为我对此没有任何了解。

如何在不使用insertRowinsertCell函数的情况下将其附加到表中?请帮帮我们..

4 个答案:

答案 0 :(得分:3)

  

请注意,PHP中的任何值都没有特殊字符。

你有新的文字行(JS字符串文字中不允许这样做)。正如dhidy指出的那样,你在数据中也有未转义的"个字符,并用"个字符分隔JS字符串。

使用json_encode将PHP字符串转换为(适当转义的)JavaScript字符串文字。请注意,将生成数据周围的引号字符,因此您不应单独添加它们。

var tr = <?php echo json_encode($tr); ?>;

答案 1 :(得分:1)

这是由于两个原因

a)javascript中的新行字符被视为语句终止符,而不是在php

因此您的代码回显

        <script>
          var tr = "<tr><td></td>
        <td><div class="led on"></div></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td><input type="button" onclick="document.location.href='/backoffice_dev.php/currency/edit/EUR';" value="Edit"></td></tr>";
            console.log(tr);
        </script>

哪个是错误

b)没有正确封闭“,”字符,用户转义序列来执行此操作,如下所示

        <?php

        $actionbutton = '<input type=\'button\' onclick=\'document.location.href=\'/backoffice_dev.php/currency/edit/EUR\';\' value=\'Edit\'>';
        $tr .= '<tr><td>'.$addNewCurrencyPOST["id"].'</td>';
        $tr .= '<td><div class=\'led on\'></div></td>';
        $tr .= '<td>'.$addNewCurrencyPOST["symbol"].'</td>';
        $tr .= '<td>'.$addNewCurrencyPOST["symbolhtml"].'</td>';
        $tr .= '<td>'.$addNewCurrencyPOST["usdrate"].'</td>';
        $tr .= '<td>'.$addNewCurrencyPOST["eurrate"].'</td>';
        $tr .= '<td>'.$actionbutton.'</td></tr>';

        ?>

        <script>
            var tr = "<?php echo $tr ;?>";
            console.log(tr);
        </script>

答案 2 :(得分:0)

你在php脚本中使用双引号HTML,所以你必须在你的js中使用单引号。

<script>
    var tr = '<?php echo $tr ?>';
    console.log(tr);
</script>

错误示例

<script>

   <?php $tr = '"' ?>

   var tr = "<?php echo $tr ?>";

   console.log(tr);

</script>

$tr会出错,因为var tr = """;

答案 3 :(得分:0)

您需要在PHP字符串中转义双引号,因为您要在JavaScript中用双引号将它们包装起来。你还需要摆脱新的界限。