php / html - 三重嵌套引号

时间:2017-04-22 20:17:40

标签: javascript php html nested quotes

我知道Stack Overflow上已经多次提出过类似的问题,但我在html / php中遇到了三重嵌套引号的问题。我看了很多问题,但我找到的解决方案都没有为我工作。这是我想要做的(这是在一个PHP文件中找到):

                    echo"<div id = 'feed-element'>
                    <button class='username-button' type='button'>@".$currentUsername."</button>
                    <button class='hashtag-one-button' type='button'>".$hashtag_one."</button>
                    <button class='hashtag-two-button' type='button'>".$hashtag_two."</button>
                    <button class='play-button' id='play-button".$i."' type='button' onclick='changeImage(this.id,\'".$track_url."\')'></button>
                    <button class='email-button' type='button'>Contact: ".$email."</button>
                </div>";

导致我出现问题的具体行是倒数第三行:

<button class='play-button' id='play-button".$i."' type='button' onclick='changeImage(this.id,\'".$track_url."\')'></button>

无论如何,当我运行此代码时,我得到一个未捕获的语法:无效或意外的令牌错误。我做错了什么?

5 个答案:

答案 0 :(得分:3)

为什么不使用php heredoc并跳过逃避引号的麻烦?即:

echo <<< EOF
<div id = 'feed-element'>
    <button class='username-button' type='button'>@{$currentUsername}</button>
    <button class='hashtag-one-button' type='button'>{$hashtag_one}</button>
    <button class='hashtag-two-button' type='button'>{$hashtag_two}</button>
    <button class='play-button' id='play-button{$i}' type='button' onclick='changeImage(this.id,{$track_url})'></button>
    <button class='email-button' type='button'>Contact: {$email}</button>
</div>
EOF;

注意:
花括号是可选的,但可以帮助编写可读性。

答案 1 :(得分:1)

对于导致错误的代码,您需要转义双引号,而不是单引号:

<button class='play-button' id='play-button".$i."' type='button' onclick='changeImage(this.id,\"".$track_url."\")'></button>

因为您使用双引号,所以不需要连接。只需插入变量即可离开!

echo"<div id='feed-element'>
      <button class='username-button' type='button'>@$currentUsername</button>
      <button class='hashtag-one-button' type='button'>$hashtag_one</button>
      <button class='hashtag-two-button' type='button'>$hashtag_two</button>
      <button class='play-button' id='play-button$i' type='button' onclick='changeImage(this.id,\' $track_url\ ')'></button>
      <button class='email-button' type='button'>Contact: $email</button>
  </div>";

答案 2 :(得分:1)

要在PHP / HTML中的任何级别使用引号,请将forst级别用作单引号或双引号。之后你有两个选择。 1.使用双引号2.在引号前使用带反斜杠的单引号。例如,echo "This is 'In quotes'";echo "This is \"In quotes\"";

答案 3 :(得分:1)

为了在一行代码上使用多种类型的引号。 示例:

echo 'It\'s me, hey';

答案 4 :(得分:0)

你们都疯了。只需结束php块并写入任何内容然后重新启动它。

实施例

我想动态创建3个不同的div元素,每个元素都有两个参数:$ID$TEXT,它们代表dom元素ID和innerHTML。

现在要使它真正复杂,我想动态地将这些元素插入到Javascript函数中,以便在调用JS函数时它们会加载。

以下是如何做到这一点:您只需结束PHP标记,然后输入所需的内容,就好像PHP标记从不存在一样,并且它会像在PHP中指定的那样解析它而不必转义任何东西

<?php

   /* define regular function to generate dynamic element with PHP */
   function create_my_div($ID, $TEXT) {

  /* end the PHP tag and start just regularly entering code 
 ?>

    <div id='<?=$ID;?>'>
      <?php print_r(htmlspecialchars($TEXT)); ?>
    </div>

   <?php
   /* we started up the PHP tag again, followed by a } to end the function
}

?>

现在,只要我们用PHP调用create_my_div("someID", "some text");,它就会创建我们的DIV元素。

让我们说我们想要填充javascript函数的DIV元素服务器端并将它们放入Javascript函数create_my_divs()

我们首先需要有一种方法来确保我们的DIV元素被正确转义,如其他答案中所述,可以使用此PHP代码完成:

<?php

function escapeJavaScriptText($string)
{
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}

?>

最后,我们所要做的就是在我们的网页上:

<script type="text/javascript">

/* target element is where the DIVS will be created in */

function create_my_divs(target_element) {
    target_element.innerHTML += "<?=escapeJavascriptText(create_my_div("DIV1", "THIS IS DIV1"));?>";
    target_element.innerHTML += "<?=escapeJavascriptText(create_my_div("DIV2", "THIS IS DIV2"));?>";
    target_element.innerHTML += "<?=escapeJavascriptText(create_my_div("DIV3", "THIS IS DIV3"));?>";


}
</script>

此方法允许您包含javascript代码或其他任何内容,而无需担心三重嵌套

这是此方法的另一个用例:

动态添加Javascript代码:

<?php  
function loop_start($varName) {
   ?>  
   for (var i=0; i<<?php print_r($varName);?>.length; i++) {

   <?php
}

?>

现在您的Javascript代码可能如下所示:

<script>
  <?php 
     loop_start("myArray");
     ?>
        console.log(myArray[i]);
     }
</script>

这会导致以下内容呈现:

<script>
  for (var i=0; i<myArray.length; i++) {
        console.log(myArray[i]);
     }
</script>

结论

不要担心尝试三重逃脱或双重逃脱,甚至完全逃脱。

通过本回答中列出的技巧,您可以避免一起逃避。

(如果你愿意,可以避免混淆)