正确的方法来逃避包含PHP变量的HTML字符串中的引号

时间:2016-03-18 20:16:16

标签: php html string variables escaping

我正在编写需要接收一些PHP变量的HTML字符串。但是,我似乎无法正确地避开双引号。

尝试1:

$html .= '<span class="badge"><a href="#" style="color:orange"><span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction(\''.$configType.'\')"></span></a></span>';

结果:

<span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction(\' project\')"=""></span>

尝试2:

$html .= '<span class="badge"><a href="#" style="color:orange"><span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction('.'$configType'.')"></span></a></span>';

结果:

<span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction(project)"></span>

关闭,但应该是'project'

期望的结果:

<span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction('project')"></span>

4 个答案:

答案 0 :(得分:2)

说到这里,你只需要先尝试一步,你只需要从单个引号中移出双引号。

$html .= '<span class="badge"><a href="#" style="color:orange"><span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction("'.$configType.'")"></span></a></span>';

Here you can see a live sample

答案 1 :(得分:1)

HEREDOC

$HTML = <<<_E_
<span class="badge"><a href="#" style="color:orange"><span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction("$configType")"></span></a></span>
_E_;

专家模式NOWDOCsprintf

$frame = <<<'_E_'
<span class="badge"><a href="#" style="color:orange"><span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction("%s")"></span></a></span>
_E_;
$HTML = sprintf($frame, $configType);

答案 2 :(得分:0)

我总是建议不要回显HTML,所以请执行此操作

<?php
$configType = 'project';
// etc ...
?>
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction(<?= $configType ?>)"></span>

如果你停止PHP,你可以编写HTML,它将正常工作。在HTML内部,您可以使用简写的php回声来获取HTML中所需的任何数据

这样做的一个主要优点是您的编辑器将正确语法突出显示所有代码(包括HTML)

答案 3 :(得分:0)

通过让PHP完成变量插值工作,你可以省去一些麻烦。在字符串末尾放置双引号,并将其他引号更改为单引号而不连接:

$html .= "<span class='badge'><a href='#' style='color:orange'><span class='glyphicon glyphicon-arrow-up' aria-hidden='true' onclick='sendToProduction('$configType')'></span></a></span>";