我有这个链接有用。
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。
我尝试了所有可能的点和单引号和双引号的组合。我总是遇到语法错误。我不知道如何在那里嵌入变量。
有人知道吗?
谢谢
答案 0 :(得分:8)
请大家帮忙并使用http_build_query
Docs:
<a href="?<?php echo http_build_query(array(
'country' => $country,
'fromLanguage' => $fromLanguage,
'somethingElse' => $somethingElse,
'...' => '...'
), '', '&'); ?>">Link</a>
答案 1 :(得分:3)
使用简单的内容,例如sprintf
或printf
。
例如:
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));
<强>参数化强>
printf和sprintf对于向字符串添加参数非常有用。它们可以轻松添加转义或复杂值,而不会使字符串本身不可读。您总是可以通过第一个参数一目了然地看到它是什么字符串。
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', '&');
然后,您可以使用http_build_query
:
$country = 'de';
$fromLanguage = 'en_EN';
?>
<a href="?<?php echo http_build_query(compact('country', 'fromLanguage')); ?>">Link</a>
这将为您提供完全有效编码的输出,不受注射的影响:
<a href="?country=de&fromLanguage=en_EN">Link</a>
答案 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>";