|
1樓 巨大八爪鱼
2015-11-21 12:46
<?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腳本出現語法錯誤。
|
|
2樓 巨大八爪鱼
2015-11-21 12:58
addslashes — 使用反斜線引用字元串: http://php.net/manual/zh/function.addslashes.php返回字元串,該字元串為了資料庫查詢語句等的需要在某些字元前加上了反斜線。這些字元是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字元)。
|
|
3樓 巨大八爪鱼
2015-11-21 13:02
可以使用stripslashes函數取消addslashes的轉義。 例如: <?php $str = 'Mary\'s book has been "\stolen".'; $str2 = addslashes($str); $str2 = stripslashes($str2); echo strcmp($str, $str2);
?> 輸出0,,表示$str和$str2是相同的字元串。
|
|
4樓 巨大八爪鱼
2015-11-21 13:19
【示例】 PHP從外部獲取了一段javascript腳本,其中有一個alert語句,alert語句中的字元已經經過了轉義以防止出現JS語法錯誤。這時PHP想要把這個字元串取出來,解析出轉義前的內容,也就是alert對話框中實實在在顯示的內容。 程序如下: <?php $str = 'alert("Mary\\\'s book has been \"\\\\stolen\".");'; // 這是從HTML網頁中抓取的JS Alert語句 $str = preg_replace('/^alert\("/', '', $str); $str = preg_replace('/"\);$/', '', $str); $str = stripslashes($str); echo "您在Javascript中彈出的提示框的內容為:$str"; ?> 輸出:您在Javascript中彈出的提示框的內容為:Mary's book has been "\stolen". 這正和alert對話框中顯示的內容一樣。
|
|
5樓 巨大八爪鱼
2015-11-21 13:34
【總結】 把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字元串所表示內容。
|
|
6樓 巨大八爪鱼
2015-11-21 13:55
類似的,通過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>
|