|
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>
|