PHP制作URL链接的工作是以正确的语法方式插入$ variables

时间:2012-06-05 08:11:10

标签: php url

我有这个链接有用。

echo '<a href="?country=Estonia&from_language=Russian&into_language=Latvian&submitted=true&
page='.$x. '">'.$x.'</a> ';

但我需要将名词Estonia,Russian和Latvian替换为标量变量,如$ country,$ from_language,$ into_language。

我尝试了所有可能的点和单引号和双引号的组合。我总是遇到语法错误。我不知道如何在那里嵌入变量。

有人知道吗?

谢谢

6 个答案:

答案 0 :(得分:8)

请大家帮忙并使用http_build_queryDocs

<a href="?<?php echo http_build_query(array(
    'country' => $country,
    'fromLanguage' => $fromLanguage,
    'somethingElse' => $somethingElse,
    '...' => '...'
), '', '&amp;'); ?>">Link</a>

答案 1 :(得分:3)

使用简单的内容,例如sprintfprintf

例如:

printf('<a href="?country=%s&from_language=%s&into_language=%s&submitted=true&
page=%s">%s</a>', $country, $fromLanguage, $toLanguage, $pageID, $dispText);

你也可以使用像双引号这样的编码:

echo "<a href=\"?country={$country}&from_language={$fromLanguage}&into_language={$toLanguage}&submitted=true&
    page={$pageID}\">{$dispText}</a>"

答案 2 :(得分:1)

避免在非常简单的情况下将变量直接放入字符串中。如果你想做一些好事,请使用连接和转义字符串:

echo '<a href="?country=' . htmlentities($country) . 
     '&from_language=' . htmlentities($from_language) . 
     '&into_language=' . htmlentities($into_language) . 
     '&submitted=true&page=' . intval($x) . '">' . htmlentities($x) . '</a> ';

无论如何,如果你真的想要它的复杂方式,你必须考虑你需要HTML属性的doble引号,但是需要双引号来包装PHP字符串,因为你想在其中放入变量。因此,您必须转义HTML双引号。尝试:

echo "<a href=\"?country={$country}&from_language={$from_language}&into_language={$into_language}&submitted=true&page=" . $x . '">' . $x . '</a> ';

答案 3 :(得分:1)

结合Corbin和KoolKabin的答案,为您提供了这个易于阅读的片段:

printf('<a href="%s">%s</a>',
       htmlspecialchars(
           http_build_query(array(
                                  'country' => $country,
                                  'from_language' => $from_language,
                                  'into_language' => $into_language,
                                  'submitted' => 'true',
                                  'page' => $x
                                  ))
                        ),
       htmlspecialchars($x));

<强>参数化

printfsprintf对于向字符串添加参数非常有用。它们可以轻松添加转义或复杂值,而不会使字符串本身不可读。您总是可以通过第一个参数一目了然地看到它是什么字符串。

http_build_query也是参数化的一种方式,但对于查询字符串。主要用途是你根本不需要关注查询字符串的语法。

<强>逃逸

htmlspecialchars确保数据适合插入HTML代码。它类似于在SQL查询中转义以避免SQL注入,只是在这里我们要避免HTML注入(也称为XSS或cross-site scripting)。

http_build_query将自动确保转义所有值,以便在浏览器的地址字段中将作为URL 插入。此保证适合插入 HTML代码。因此,查询字符串也需要htmlspecialchars!

答案 4 :(得分:1)

如果脚本输出HTML,请考虑配置参数分隔符arg_separator.output的输出设置:

ini_set('arg_separator.output', '&amp;');

然后,您可以使用http_build_query

简单地创建URI查询信息路径
$country = 'de';
$fromLanguage = 'en_EN';

?>

<a href="?<?php echo http_build_query(compact('country', 'fromLanguage')); ?>">Link</a>

这将为您提供完全有效编码的输出,不受注射的影响:

<a href="?country=de&amp;fromLanguage=en_EN">Link</a>

Full Demo

答案 5 :(得分:-1)

$country = 'Estonia';
$from_language = 'Russian';
$into_language = 'Latvian';
echo '<a href="?country='.$country.'from_language='.$from_language.'&into_language='.$into_language.'&submitted=true&page='.$x. '">'.$x.'</a> ';

OR

echo "<a href=\"?country=$country&from_language=$from_language&into_language=$into_language&submitted=true&page=$x\">$x</a>";

OR

echo "<a href=\"?country={$country}&from_language={$from_language}&into_language={$into_language}&submitted=true&page={$x}\">{$x}</a>";