позволяет представить редактор форм, он может редактировать доступные значения. Если данные содержат "
символ (двойная кавычка), он« разрушает »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 -->