<?php
$name = 'Mary\'s book has been "\stolen".';
?>
<script>
function a() {
alert("<?=addslashes($name)?>");
}
</script>
輸出:
<script>
function a() {
alert("Mary\'s book has been \"\\stolen\".");
}
</script>
這樣就不會因為php變量中的特殊字符導致生成的JS腳本出現語法錯誤。
目前共有6篇帖子。
![]() |
<?php 這樣就不會因為php變量中的特殊字符導致生成的JS腳本出現語法錯誤。 |
![]() |
addslashes — 使用反斜線引用字符串:
http://php.net/manual/zh/function.addslashes.php 返回字符串,該字符串為了數據庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字符)。 |
![]() |
可以使用stripslashes函數取消addslashes的轉義。 例如: ?> 輸出0,,表示$str和$str2是相同的字符串。 |
![]() |
【示例】 這正和alert對話框中顯示的內容一樣。 |
![]() |
【總結】
把PHP變量放入JavaScript字符串中: <script> function a() { alert("<?=addslashes($var)?>"); } </script> 把Javascript字符串表示的內容解析到PHP變量中: <?php $str = 'alert("x\"xx")'; // 從外部獲得的JavaScript代碼中的一句alert語句 $start = strpos($str, '"'); // 第一次雙引號出現的位置 $end = strrpos($str, '"'); // 最後一次雙引號出現的位置 $content = substr($str, $start + 1, $end - $start - 1); // 截取$str中雙引號中的內容 $content = stripslashes($content); // 去除JavaScript轉義 echo $content; ?> 輸出x"xx,正是JavaScript字符串所表示內容。 |
![]() |
類似的,通過addslashes函數,PHP變量把一段JS代碼傳遞給JavaScript並eval執行。
<?php $script = 'var a="This";var b="is";alert(a+" "+b+" a pen.");'; ?> <script> function b() { var scr = "<?=addslashes($script)?>"; eval(scr); } </script> |