从PHP代码打印的带有单引号的Javascript字符串

时间:2011-07-13 21:17:59

标签: php javascript escaping

我有从PHP打印的以下脚本。如果某人在描述中有单引号,则表示缺少javascript错误;因为它认为字符串已终止。

print   "<script type=\"text/javascript\">\n
    var Obj = new Array();\n
     Obj.title        = '{$_REQUEST['title']}'; 
     Obj.description     = '{$_REQUEST['description']}';
     </script>";

表单在此页面上发布帖子,标题和说明来自textbox.Also我无法在{$ _REQUEST ['title']}周围加上双引号,因为它显示语法错误。我怎么处理这个?

3 个答案:

答案 0 :(得分:3)

更干净(更安全)的方式(imo):

<?php 
//code here

$title = addslashes(strip_tags($_REQUEST['title']));
$description = addslashes(strip_tags($_REQUEST['description']));
?>
<script type="text/javascript">
 var Obj = new Array();
 Obj.title = '<?php echo $title?>'; 
 Obj.description = '<?php echo $description?>';
</script>

答案 1 :(得分:0)

你还需要注意换行等事情。 JavaScript字符串不能跨越多行。 json_encode是要走的路。 (由于代码示例,将其添加为新答案。)

<?php

$_REQUEST = array(
    'title'       => 'That\'s cool',
    'description' => 'That\'s "hot"
                      & not cool</script>'
);

?>

<script type="text/javascript">
 var Obj = new Array();
 Obj.title = <?php echo json_encode($_REQUEST['title'], JSON_HEX_TAG); ?>;
 Obj.description = <?php echo json_encode($_REQUEST['description'], JSON_HEX_TAG); ?>;

 alert(Obj.title + "\n" + Obj.description);
</script>

修改(2016年11月15日):JSON_HEX_TAG参数添加到json_encode个来电。我希望这解决了在<script>元素中将数据写入JavaScript时的所有问题。有一些rather annoying corner cases

答案 2 :(得分:-1)

使用字符串连接运算符:

http://php.net/manual/en/language.operators.string.php

print   "<script type=\"text/javascript\">\n
    var Obj = new Array();\n
     Obj.title        = '".$_REQUEST['title']."'; 
     Obj.description     = '".$_REQUEST['description']."';
     </script>";