php/html - 三重嵌套引号
php/html - triple nesting quotes
我知道类似的问题在 Stack Overflow 上被问过很多次,但我在 html/php 中遇到了三重嵌套引号的问题。我已经查看了很多问题,但是 none 我找到的解决方案对我有用。这是我正在尝试做的事情(可以在 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>
无论如何,当我 运行 这段代码时,我得到一个未捕获的语法:无效或意外的令牌错误。我做错了什么?
对于导致错误的代码,您需要转义双引号,而不是单引号:
<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>";
要在 PHP/HTML 中的任何级别使用引号,请将第一个级别用作单引号或双引号。之后你有两个选择。 1. 使用双引号 2. 在引号前使用带反斜杠的单引号。例如,echo "This is 'In quotes'";
或 echo "This is \"In quotes\"";
为什么不使用 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;
注:
大括号是可选的,但可能有助于提高代码可读性。
为了在一行代码中使用多种类型的引号,请使用 .
示例:
echo 'It\'s me, hey';
你们都疯了。只需结束 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), "[=11=]..'\")));
}
?>
最后,我们所要做的就是在我们的网页上:
<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>
结论
不用担心尝试三重逃脱或双重逃脱,甚至根本逃脱。
使用此答案中概述的技巧,您可以避免一起转义。
(如果你愿意,请避免混淆)
我知道类似的问题在 Stack Overflow 上被问过很多次,但我在 html/php 中遇到了三重嵌套引号的问题。我已经查看了很多问题,但是 none 我找到的解决方案对我有用。这是我正在尝试做的事情(可以在 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>
无论如何,当我 运行 这段代码时,我得到一个未捕获的语法:无效或意外的令牌错误。我做错了什么?
对于导致错误的代码,您需要转义双引号,而不是单引号:
<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>";
要在 PHP/HTML 中的任何级别使用引号,请将第一个级别用作单引号或双引号。之后你有两个选择。 1. 使用双引号 2. 在引号前使用带反斜杠的单引号。例如,echo "This is 'In quotes'";
或 echo "This is \"In quotes\"";
为什么不使用 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;
注:
大括号是可选的,但可能有助于提高代码可读性。
为了在一行代码中使用多种类型的引号,请使用 . 示例:
echo 'It\'s me, hey';
你们都疯了。只需结束 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), "[=11=]..'\")));
}
?>
最后,我们所要做的就是在我们的网页上:
<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>
结论
不用担心尝试三重逃脱或双重逃脱,甚至根本逃脱。
使用此答案中概述的技巧,您可以避免一起转义。
(如果你愿意,请避免混淆)