我想从php文件中执行javascript函数
像:
<?php
$type=0;
echo('<img onclick="alert('.$type.')" src="picture.jpg"/>');
?>
结果:确定一切正常。现在我想用字符串来做:
<?php
$type='e';
echo('<img onclick="alert('.$type.')" src="picture.jpg"/>');
?>
结果:未捕获的ReferenceError:e未定义,只需点击@ loadPlayer2.php:2
<?php
$type='e';
echo('<img onclick="alert("'.$type.'")" src="picture.jpg"/>');
?>
结果:未捕获的SyntaxError:意外的令牌}
<?php
$type='e';
echo('<img onclick="alert(\"'.$type.'\")" src="picture.jpg"/>');
?>
结果:未捕获的SyntaxError:意外的标记ILLEGAL
<?php
$type='\e';
echo('<img onclick="alert("$type")" src="picture.jpg"/>');
?>
结果:未捕获的SyntaxError:意外的令牌}
答案 0 :(得分:3)
不同的上下文需要不同的转义。您正在将PHP字符串与HTML属性和JavaScript字符串混合在一起。
String interpolation仅适用于双引号:
alternate single+dbl quotes
↓
echo "<img onclick='alert(\"$type\")' src='picture.jpg'>"
↑
escaped quote
$type
变量可以按照json_encode
从PHP字符串转换为JS字符串:
$type = json_encode($type);
echo "<img onclick='alert($type)' src='picture.jpg'>"
↑
adds "double" quotes automatically
最好将htmlspecialchars
应用于整个属性:
$type = json_encode($type);
$onclick = htmlspecialchars("alert($type)");
echo "<img onclick='$onclick' src='picture.jpg'>"
↑
escapes `"` into `"`
因此结果输出应如下所示:
<img onclick='alert("\\e")' src='picture.jpg'>
↑
pseudo-XHTML begone
此时,甚至可以再次使用"
作为属性值。
答案 1 :(得分:0)
解决:
<?php
$type="e";
echo('<img onclick="alert(\''.$type.'\')" src="picture.jpg"/>');
?>