我知道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>
无论如何,当我运行此代码时,我得到一个未捕获的语法:无效或意外的令牌错误。我做错了什么?
答案 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>
不要担心尝试三重逃脱或双重逃脱,甚至完全逃脱。
通过本回答中列出的技巧,您可以避免一起逃避。
(如果你愿意,可以避免混淆)