目前共有6篇帖子。 內容轉換:不轉換▼
 
點擊 回復
322 5
在JavaScript脚本的字符串中嵌入PHP变量的时候,addslashes函数非常有用
一派護法 十九級
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>

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:322 回複數:5
評論數: ?
作者: 巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2015-11-21 13:55
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。