Как избежать строки из PHP для javascript?

позволяет представить редактор форм, он может редактировать доступные значения. Если данные содержат " символ (двойная кавычка), он« разрушает »HTML-код. Я имел в виду, пусть проверяет код: поэтому я генерирую HTML:

onclick="var a = prompt('New value: ', '<?php echo addslashes($rec[$i]); ?>'); if (a != null)....

и это приводит к

onclick="var a = prompt('New value: ', 'aaaa\"aaa'); if (a != null) { v....

и это делает работу JS невозможной, так что она разрушает код. С одним qoute он работает нормально. mysql real escape делает то же самое. Как избежать любой строки, чтобы она не испортила javascript?


json_encode выглядел нормально, но я должен делать что-то не так, его все еще плохо: heres скриншот, как видит Firefox – он вставляет «плохую» двойную цитату! Это простое число:

http://img402.imageshack.us/img402/5577/aaaahf.gif

и я использовал:

 ('Ird be az új nevet:', <?php echo json_encode($rec['NAME']); ?>); if (a) { 

Значение атрибута onclick следует экранировать как любой другой атрибут HTML, используя htmlspecialchars() . Фактические строки Javascript внутри кода должны быть закодированы с помощью json_encode() . Например:

 <?php $message = 'Some \' problematic \\ chars " ...'; $jscode = 'alert('.json_encode($message).');'; echo '<a onclick="' . htmlspecialchars($jscode) . '">Click me</a>'; 

Это сказано … атрибуты onclick (или любые другие события) – это 2005 год. Сделайте себе одолжение и отделите свой javascript-код от вашего html-кода, желательно во внешний файл, и присоедините события с помощью функций DOM (или jQuery, который обертывает это хорошо)

 onclick="var a = prompt('New value: ', 'aaaa\"aaa'); if (a != null) { v.... 

Ваша проблема выделена жирным шрифтом. Вы не можете приводить объявление переменной, вам не нужно будет избегать двойной цитаты, как только она будет удалена, так как она находится в одинарных кавычках. Должен выглядеть так:

 onclick="newFunc();" <script> function newFunc() { var a = prompt('New value: ', 'aaaa"aaa'); if (a != null) { v.... } </script> 
 ...onclick="new_func();"... <script> function new_func() { var a = prompt('new value:','<?php code; ?>'); if (a) { <!--javascript code--> } else { <!--javascript code--> } } </script> 

Я действительно просто переписываю то, что здесь говорит @Marshall House, но:

В HTML двойная кавычка (") всегда будет заканчивать атрибут, независимо от обратного слэша, – поэтому он видит: onclick="var a = prompt('New value: ', 'aaaa\" . Решение, предлагаемое @Marshall чтобы отделить ваш код от функции. Таким образом, вы можете без проблем печатать с экранированным PHP.

Например:

 <script> // This is a function, wrapping your code to be called onclick. function doOnClickStuff() { // You should no longer need to escape your string. Eg: //var a = prompt('new value:','<?php echo $rec[$i]; ?>'); // Although the following could be safer var a = prompt('new value:',<?php json_encode($rec[$i]); ?>); if (a) { <!--javascript code--> } else { <!--javascript code--> } } </script> <someelement onclick="doOnClickStuff();"> <!-- this calls the javascript function doOnClickStuff, defined above -->