Javascript字符串与单引号从PHP代码打印


Javascript String with Single Quote printed from PHP code

我有以下脚本从PHP打印。如果有人在描述中有一个单引号,它显示javascript错误缺失;因为它认为字符串终止。

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

表单发送到这个页面,标题和描述来自文本框。我也无法把双引号{$_REQUEST['title']},因为它显示语法错误。

一个更干净(和安全)的方式(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>

您还需要注意诸如换行符之类的事情。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>

Edit (2016-11-15):json_encode调用中增加JSON_HEX_TAG参数。我希望这解决了在<script>元素内将数据写入JavaScript时的所有问题。

使用字符串连接操作符:

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