我从三列返回数据并显示:
echo "<p><h3><span class='tyler'>".$results['COL 2']."</span></h3>".$results['COL 4'].$results['COL 3']."</p>";
这很好用。 COL 4
是一个实际的网址,我试图将其放在一个锚点标记中,COL 3
作为锚文本:
echo "<p><h3><span class='tyler'>".$results['COL 2']."</span></h3>""<a href=".$results['COL 4']"/>".$results['COL 3']."</a></p>";
我正在尝试使用此代码,但它不起作用。我的假设是问题与结束h3
标记后的背靠背引号有关。我将如何开展这项工作?
答案 0 :(得分:1)
构建输出到HTML的大字符串会让人感到困惑。这就是你所拥有的:
echo "<p><h3><span class='tyler'>"
.$results['COL 2']
."</span></h3>""<a href=".$results['COL 4']"/>"
.$results['COL 3']
."</a></p>";
我已将其分解为更清楚地引用正在发生的事情。在第三行(从关闭 - span
标记开始),您有两个双引号紧挨着。此外,您有引号打开标记的close-slash部分,但不是字符串连接运算符(.
)。最后,你会混淆双引号和单引号。你想要:
."</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
到&#39;你想要的字符串。它可以让你更清楚地构建html,而不必担心具体的动态&#39;价值观是。当然,还有许多其他方法可以做这种“模板化”。
这行代码为PHP中的变量分配一个简单的字符串:
$message = "Hello world!";
这行代码&#39;连接&#39;三个字符串使用连接运算符(点:.
):
$html = "<p>".$html."</p>";
这一行会产生相同的结果:
$html = "<p>Hello world!</p>";
此行将产生错误:
$bad = "<p>""Hello world!""</p>";
它产生错误的原因是因为该语言将被标记为&#39;代码如下:
<variable name> <assign> <string> <string> <string> <end statement>
除此之外,在语义上,连续三个<string>
是没有意义的。它需要一个&#39;运营商&#39;在他们之间,像这样:
<variable name> <assign> <string> <concatenate> <string> <concatenate> <string> <end statement>
PHP知道如何解析&#39;这串令牌。它将知道评估每个字符串,然后将它们连接在一起。中间阶段变为:
<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&#39;输出&#39;最后的结果,它所做的只是回声或打印&#39; HTML响应的字符串。鉴于此,并且鉴于PHP将双引号解释为&#39; end&#39;一个字符串,你如何将字符串放入一个变量,所以它打印出来像上面的HTML?这不会起作用,因为PHP在这种情况下不知道如何解释http://...
:
echo "<a href="http://www.stackoverflow.com/help">SO Help Page</a>";
有几种方法可以解决这个问题。你可以逃脱&#39;双引号:
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脚本,这可能会让人感到困惑。因此,将字符串分解为可管理的块,这样您就可以看到您正在插入的内容以及内容(如引号,打开和关闭标记等)使您的生活更轻松。