Кавычки - PullRequest
       43

Кавычки

0 голосов
/ 25 января 2012

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

Я собираюсь немного поработать над этим:

$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 и ' s

Итак, я пишу возвращаемую строку в PHP, так что все, что есть в "

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

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

Пока все в порядке.

Итак, мой вызов onchange должен закончиться как onchange="function('a', 'b')", где мои " придет?Если я использую ", это завершит строку PHP.Если я использую \", это завершит строку innerHTML.Итак, я получил PHP для интерпретации этого chr(92).chr(34)

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

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

Я, должно быть, делаю что-то неправильно с точки зрения стиля или чего-то еще.

Как вы справляетесь с вложенными " s?

Ответы [ 4 ]

4 голосов
/ 25 января 2012

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

\\\"

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

4 голосов
/ 25 января 2012

Рассмотрите возможность использования синтаксиса 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;
3 голосов
/ 25 января 2012

Рассматривали ли вы попытку цитирования таких цитат, как \\\"?

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

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

1 голос
/ 25 января 2012

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

<script type='text/javascript'>
<!--
var a = 'a';
var b = 'b';
-->
</script>
...
<... onchange='function(a, b)'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...