Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP通过正确的语法插入$variables来创建URL链接_Php_Url - Fatal编程技术网

PHP通过正确的语法插入$variables来创建URL链接

PHP通过正确的语法插入$variables来创建URL链接,php,url,Php,Url,我有这个链接 echo '<a href="?country=Estonia&from_language=Russian&into_language=Latvian&submitted=true& page='.$x. '">'.$x.'</a> '; echo'; 但我需要将名词爱沙尼亚语、俄语和拉脱维亚语替换为标量变量,如$country、$from_language、$into_language 我尝试了所有可能的点和单双引号的组

我有这个链接

echo '<a href="?country=Estonia&from_language=Russian&into_language=Latvian&submitted=true&
page='.$x. '">'.$x.'</a> ';
echo';
但我需要将名词爱沙尼亚语、俄语和拉脱维亚语替换为标量变量,如$country、$from_language、$into_language

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

有人知道吗


谢谢

避免在不太简单的情况下将变量直接放入字符串中。如果您想做点好事,请改用串联和转义字符串:

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

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

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

使用一些简单的方法,比如
sprintf
printf

例如:

printf(“”,$country,$fromLanguage,$toLanguage,$pageID,$dispText);
您还可以使用双引号符号进行编码,例如:

echo "<a href=\"?country={$country}&from_language={$fromLanguage}&into_language={$toLanguage}&submitted=true&
    page={$pageID}\">{$dispText}</a>"
echo“”
$country='爱沙尼亚';
$from_language='俄语';
$into_语言=‘拉脱维亚语’;
回声';

echo”“;

echo”“;

帮自己一个大忙,使用:


将科尔宾和库尔卡宾的答案结合在一起,您可以轻松阅读以下片段:

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(“”,
htmlspecialchars(
http_生成_查询(数组)(
“国家”=>$country,
“from_language”=>from_language$,
'into_language'=>$into_language,
'已提交'=>'正确',
“页面”=>x美元
))
),
htmlspecialchars($x));
参数化

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

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

转义

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


HTTpHuBudidQuebug将自动确保所有值都被作为URL插入到浏览器中的地址字段中。这不能保证插入HTML代码的正确性。因此,QuestSrand也需要HTMLPrimeCARS!

< P>如果脚本输出HTML,考虑配置AgMUE的输出设置。nt分离器:

然后,您可以使用http\u build\u query
简单地创建URI查询信息路径:

$country = 'de';
$fromLanguage = 'en_EN';

?>

<a href="?<?php echo http_build_query(compact('country', 'fromLanguage')); ?>">Link</a>
$country='de';
$fromLanguage='en_en';
?>
这将为您提供一个完全有效编码的输出,对注射免疫:

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



你知道如何连接
$x
,但不知道其他变量吗?读这篇文章,我看到每个人都在字符串中填充变量。伙计们,引用你的HTML和URLSLAzz,也许你知道变量背后是什么。我不知道,而且我知道这些变量可能是正确的硬编码。但是当使用
printf
时,添加su是很简单的如果需要的话。为什么要投反对票?这个答案可能是最不复杂的。如果需要的话,这也有助于输入卫生。如果其中一个有一个-,会发生什么(尽管我不是投反对票的人)?这一点您忽略了。@corbin是真的,但这不是问题的目的。不过可能值得一提。我用所有的filter var函数做了所有的输入。最后,有效的链接是:echo”";我不知道
http\u build\u query
。非常有用,谢谢:)@jammypache我猜大约90%的PHP开发人员不知道:)。很高兴我能帮上忙。为了什么?只是在东西上扔函数,因为你认为扔得越多越安全?hakre,http\u build\u查询实际上会输出无效的HTML代码。@hakre。我忘了把它挂起来。urlencoded并不意味着HTML是安全的。@Emil:字数更少,更精确:是的,它会输出参数。但是它需要页面的名称,否则它只会给出这样的信息:当你正确使用realtive URI时,请看不,让我看看是否有关于什么是相对URI的技术性描述,这样更好吗,我读过关于绝对路径和相对路径的书,原则上,这些形容词在某种程度上描述了它们的含义,但是,如何在http_build_查询中实现这一点可能并不那么明显。您不需要这样做。在它前面放置一个
,然后创建一个与链接所在页面相关的URI。它更多的是一个概念,而不是一个你需要调用或设置参数的特定函数。感谢Lorenzo,这也为以后的工作带来了很大的便利。我从来都不喜欢写复杂的字符串,把它分成几个部分会让它更容易!
echo "<a href=\"?country={$country}&from_language={$from_language}&into_language={$into_language}&submitted=true&page={$x}\">{$x}</a>";
<a href="?<?php echo http_build_query(array(
    'country' => $country,
    'fromLanguage' => $fromLanguage,
    'somethingElse' => $somethingElse,
    '...' => '...'
), '', '&amp;'); ?>">Link</a>
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));
ini_set('arg_separator.output', '&amp;');
$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>