如何将查询结果转换为链接?

时间:2016-03-23 20:00:14

标签: php html

我从三列返回数据并显示:

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标记后的背靠背引号有关。我将如何开展这项工作?

1 个答案:

答案 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中的字符串构建旁边

这行代码为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脚本,这可能会让人感到困惑。因此,将字符串分解为可管理的块,这样您就可以看到您正在插入的内容以及内容(如引号,打开和关闭标记等)使您的生活更轻松。