我从三列返回数据并显示为:
echo "<p><h3><span class='tyler'>".$results['COL 2']."</span></h3>".$results['COL 4'].$results['COL 3']."</p>";
这工作正常。 COL 4
是一个实际的 URL,我正在尝试将其放在锚标签中,并将 COL 3
作为锚文本:
echo "<p><h3><span class='tyler'>".$results['COL 2']."</span></h3>""<a href=".$results['COL 4']"/>".$results['COL 3']."</a></p>";
我正在尝试使用此代码,但它不起作用。我的假设是问题与结束h3
标签后的背靠背引号有关。我将如何完成这项工作?
构建输出到 HTML 的大字符串可能会令人困惑。这是你所拥有的:
echo "<p><h3><span class='tyler'>"
.$results['COL 2']
."</span></h3>""<a href=".$results['COL 4']"/>"
.$results['COL 3']
."</a></p>";
我已经分解了它,以更清楚地参考正在发生的事情。在第三行(从 close- span
标记开始(,您有两个紧挨着的双引号。此外,您有引号打开标签的右斜杠部分,但没有字符串连接运算符 ( .
(。最后,您混淆了双引号和单引号。你想要:
."</span></h3><a href='".$results['COL 4']."'/>"
但更好的方法是拆分组件:
$title = $results['COL 2'];
$href = $results['COL 4'];
$anchor_text = $results['COL 4'];
// Here you can add debugging statements to ensure you have the right values.
$paragraph = "<p><h3><span class='tyler'>%s</span></h3><a href='%s'>%s</a></p>"
echo sprintf($paragraph, $title, $href, $anchor_text);
此方法使用 sprintf
来"插入"所需的字符串。它使您可以更清楚地构建html,而不必担心特定的"动态"值是什么。当然,还有许多其他方法可以完成这种"模板化"。
关于 PHP 中字符串构建的旁白
这行代码将一个简单的字符串分配给 PHP 中的变量:
$message = "Hello world!";
这行代码使用连接运算符(这是一个点:.
("连接"三个字符串:
$html = "<p>".$html."</p>";
此行将产生等效的结果:
$html = "<p>Hello world!</p>";
此行将产生错误:
$bad = "<p>""Hello world!""</p>";
它产生错误的原因是因为语言会将代码"标记化"为以下内容:
<variable name> <assign> <string> <string> <string> <end statement>
除了,从语义上讲,连续三个<string>
没有意义。它们之间需要一个"运算符",如下所示:
<variable name> <assign> <string> <concatenate> <string> <concatenate> <string> <end statement>
PHP 知道如何"解析"这串令牌。它将知道计算每个字符串,然后将它们连接在一起。中间阶段是这样的:
<variable name> <assign> <string (composed of three previous strings)> <end statement>
它知道这一点,因为串联运算符告诉它如何组合这些字符串。
这让我们回到使用点/连接运算符:
$html = "<p>Hello world!</p>";
现在,HTML 标记如下所示:
<a href="http://www.stackoverflow.com/help">SO Help Page</a>
当PHP"输出"最终结果时,它所做的只是将字符串"回显"或"打印"到HTML响应中。鉴于此,并且考虑到PHP将双引号解释为字符串的"结束",如何将字符串放入变量中,以便像上面的HTML一样打印出来?这是行不通的,因为PHP不知道在这种情况下如何解释http://...
:
echo "<a href="http://www.stackoverflow.com/help">SO Help Page</a>";
有几种方法可以解决这个问题。您可以"转义"双引号:
echo "<a href='"http://www.stackoverflow.com/help'">SO Help Page</a>";
通过在双引号前插入字符串中的'
,您可以向 PHP 发出信号,不要结束字符串标记,从而将整个内容解析为单个字符串。
或者,HTML 也接受其属性值的单引号。所以你可以这样做:
echo "<a href='http://www.stackoverflow.com/help'>SO Help Page</a>";
这会在 HTML 响应上产生以下结果:
<a href='http://www.stackoverflow.com/help'>SO Help Page</a>
无论你走哪条路,你都必须记住,PHP 代码不会神奇地知道你正在构建一个 HTML 页面:它只是构造字符串并将其打印到 HTML 响应中。你必须告诉它什么时候忽略字符串的一部分。
我上面的观点是,对于足够长的PHP脚本,这可能会变得令人困惑。因此,将字符串分解为可管理的块,以便您可以看到要插入的内容以及内容(如引号、打开和关闭标签等(的位置,使您的生活更轻松。