Строка Javascript с одинарной кавычкой, напечатанная из кода PHP - PullRequest
1 голос
/ 14 июля 2011

У меня есть следующий скрипт, напечатанный из PHP. Если у кого-то есть одна цитата в описании, это показывает, что отсутствует ошибка JavaScript; как он считает, строка завершилась.

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

Форма отправляет сообщение на эту страницу, а заголовок и описание взяты из текстового поля. Также я не могу поместить двойные кавычки вокруг {$ _REQUEST ['title']}, так как он показывает синтаксическую ошибку. Как я могу справиться с этим?

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

более чистый (и безопасный) способ сделать это (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>
0 голосов
/ 14 июля 2011

Вы также должны быть осторожны с такими вещами, как разрывы строк.Строки 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-Nov-15): Добавляет параметр JSON_HEX_TAG к json_encode вызовам.Я надеюсь это решает все проблемы при записи данных в JavaScript внутри элементов <script>.Есть несколько довольно раздражающих угловых чехлов .

0 голосов
/ 14 июля 2011

Используйте оператор конкатенации строк:

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>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...