引用引号

时间:2012-01-24 21:54:07

标签: php javascript ajax nested

任何人都有这样的想法吗?

我正在努力解决这个问题:

$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来编写调用Ajax函数的Javascript,而让我感到震惊的是"' s

所以我用PHP写了一个返回字符串,所以"

然后我想写一些innerHTML,以便我可以放入\"

然后HTML参数可以在'

到目前为止一切都很好。

那么我的onchange调用最终会以onchange="function('a', 'b')"结束,好吧,"来自哪里?如果我使用"那将结束PHP字符串。如果我使用\"来结束innerHTML字符串。所以我最终得到PHP来解释这个chr(92).chr(34)

所以这非常混乱,它开始伤害我的头脑。

现在它在第二个$toReturn之后的那个空白行上失败了,为了便于阅读,我想要它。

我必须在风格或某事方面做错事。

如何处理嵌套的"

4 个答案:

答案 0 :(得分:4)

考虑使用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;

答案 1 :(得分:4)

使用双重转义双引号:

\\\"

通过这种方式打印时,它将成为一个简单的转义双引号(\"),它不会出现在innerHTML中。

答案 2 :(得分:3)

您是否考虑过引用引号如\\\"

一步后,通常会变为\",并且在第二步"之后。

无论如何,从(php)代码生成(html)代码中的(javascript)代码必然会变得混乱。考虑使用模板系统或分离问题。

答案 3 :(得分:1)

另一个技巧是在将它们放入onchange之前在javascript中定义字符串,然后在那里使用单引号

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