Цитирование кавычек

У кого-нибудь есть способ подумать об этом?

Я собираюсь немного летучих мышей, работающих над этим:

$toReturn .= " function addProd(pExists) { document.getElementById('products').innerHTML = \"<tr><td id='prod_n'><input type='text' size='10' maxlength='10' name='proj_n' id='prod_n' onchange=".chr(92).chr(34)."saveData(setSaveParams('ajaxSaveDataController.php', 'PROD', 'n'), this.value)".chr(92).chr(34)." value='"; $toReturn .="'></td> <td id='prod_spec'> <textarea cols='60' name='prod_spec' id='prod_spec' rows='20' onchange=".chr(92).chr(34)."saveData(setSaveParams('ajaxSaveDataController.php', 'PROD', 'prod_spec'), this.value)".chr(92).chr(34)." value='"; $toReturn .="'></td></tr>\" + document.getElementById('prodsTab').innerHTML; if (pExists == 0) { document.getElementById('prodsTab').innerHTML = \"<tr><th id='proj_spec_h'>Name</td><th id='proj_spec_h'>Spec</td></tr>\" + document.getElementById('prodsTab').innerHTML;"; 

Я переписал это, поэтому не беспокойтесь о том, что опечатка не подходит.

Что здесь происходит, я использую PHP для написания Javascript, который вызывает функцию Ajax, а то, что меня отталкивает, это " s» и '

Поэтому я пишу строку возврата, на PHP, так что все, что в "

Затем я хочу написать некоторый innerHTML, чтобы я мог поместить внутри \"

Затем аргументы HTML могут быть в '

Все в порядке.

Таким образом, мой onchange-вызов должен заканчиваться так: onchange="function('a', 'b')" , ну, откуда мои " будут», если я использую " что закончит строку PHP. Если я использую \" что закончит строку innerHTML. Поэтому я закончил тем, что PHP интерпретировал этот chr(92).chr(34)

Так что это очень грязно, и это начинает ранить мою голову.

И теперь он терпит неудачу в этой пустой строке после второго $toReturn , который я хотел там для удобочитаемости.

Я должен делать что-то не так с точки зрения стиля или чего-то.

Как вы обрабатываете вложенные?

Используйте двойные экранированные двойные кавычки:

 \\\" 

Таким образом, когда это будет напечатано, оно станет простой экранированной двойной кавычкой ( \" ), и она не будет в innerHTML.

Рассмотрим использование синтаксиса HEREDOC. http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

 <?php $my_string = <<<EOD <script type="text/javascript"> var x = "this string has a ' known as a single quote!"; </script> EOD; ?> 

Преимущество этого синтаксиса заключается в том, чтобы свободно писать html или javascript без экранирования кавычек.

Обновить

Вот немного больше информации о HEREDOC.

Прежде всего, наиболее распространенная ошибка, связанная с синтаксисом heredoc, вызвана пробелом. Синтаксис HEREDOC требует идентификатора открытия и закрытия. В приведенном выше примере я использовал EOD как идентификатор. Важно, чтобы идентификатор открытия не имел пробелов после него, а идентификатор закрытия находился в новой строке, перед пробелом не было пробелов и пробелов между идентификатором и точкой с запятой.

Вам не нужно использовать EOD качестве вашего идентификатора. Вы можете использовать что-то более описательное. Мне нравится использовать идентификатор, который описывает блок кода.

 <?php $html = <<<HTML <html> <head> <title>Example html</title> </head> <body> <p class="paragraph">This is my html!</p> </body> </html> HTML; $javascript = <<<JAVASCRIPT <script type="text/javascript"> var helloText = "Hello, my name is Jrod"; alert(helloText); </script> JAVASCRIPT; ?> 

Чтобы использовать переменные в синтаксисе heredoc, вам нужно будет использовать фигурные скобки вокруг вашей переменной в коде.

 $widget = <<<WIDGET <p>Good Morning {$name}</p> WIDGET; 

Считаете ли вы, что процитировали цитаты, такие как \\\" ?

После одного шага это обычно становится \" и после второго шага " .

Во всяком случае, генерация (javascript) кода внутри (html) кода из (php) кода неизбежно станет беспорядочной. Подумайте об использовании системы шаблонов или о разделении проблем.

Еще один трюк – это определение строк в javascript, прежде чем помещать их в onchange, а затем использовать одинарные кавычки

 <script type='text/javascript'> <!-- var a = 'a'; var b = 'b'; --> </script> ... <... onchange='function(a, b)'>