enl*_*loz 309 php url query-string
从URL查询字符串获取参数的"需要更少代码"的方法是什么,格式如下?
www.mysite.com/category/subcategory?myqueryhash
输出应该是: myqueryhash
我知道这种方法:
www.mysite.com/category/subcategory?q=myquery
<?php
echo $_GET['q']; //Output: myquery
?>
Run Code Online (Sandbox Code Playgroud)
Fil*_*efp 509
$_SERVER['QUERY_STRING'] 包含您要查找的数据.
文档
med*_*ina 80
PHP的方法是使用函数parse_url,它解析URL并返回其组件.包括查询字符串.
例:
$url = 'www.mysite.com/category/subcategory?myqueryhash';
echo parse_url($url, PHP_URL_QUERY); # output "myqueryhash"
Run Code Online (Sandbox Code Playgroud)
sbr*_*bot 73
该函数parse_str()自动将所有查询参数读入数组.
例如,如果URL是http://www.example.com/page.php?x=100&y=200代码
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
Run Code Online (Sandbox Code Playgroud)
将参数存储到$queries数组($queries['x']=100,$queries['y']=200)中.
编辑
根据PHP文档,parse_str()应该只与第二个参数一起使用.使用parse_str($_SERVER['QUERY_STRING'])这个网址将创建变量$x和$y,这使得代码容易受到诸如攻击http://www.example.com/page.php?authenticated=1.
use*_*325 25
我会建议最好的答案为
<?php
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>
假设用户输入了http://example.com/?name=Hannes
上面的例子将输出:
你好Hannes!
Kam*_*esh 10
编程语言:PHP
// Inintialize a URL to the variable
$url = 'https://www.youtube.com/watch?v=qnMxsGeDz90';
// Use parse_url() function to parse the URL
// and return an associative array which contains its various components
$url_components = parse_url($url);
// Use the parse_str() function to parse the
// string passed via the URL
parse_str($url_components['query'], $params);
// Display result
echo 'v parameter value is ' . $params['v'];
Run Code Online (Sandbox Code Playgroud)
这对我有用。
这个代码和符号不是我的。Evan K 使用自定义函数解决多值同名查询 ;) 取自:
http://php.net/manual/en/function.parse-str.php#76792 致谢 Evan K。
值得一提的是parse_str,当涉及到重复字段时,内置函数不会以 CGI 标准方式处理查询字符串。如果查询字符串中存在多个同名字段,其他所有 Web 处理语言都会将它们读入数组,但 PHP 会默默地覆盖它们:
<?php
# silently fails to handle multiple values
parse_str('foo=1&foo=2&foo=3');
# the above produces:
$foo = array('foo' => '3');
?>
Run Code Online (Sandbox Code Playgroud)
相反,PHP 使用了一种不符合标准的做法,即在字段名中包含括号以达到相同的效果。
<?php
# bizarre php-specific behavior
parse_str('foo[]=1&foo[]=2&foo[]=3');
# the above produces:
$foo = array('foo' => array('1', '2', '3') );
?>
Run Code Online (Sandbox Code Playgroud)
对于习惯了 CGI 标准的任何人来说,这可能会让人感到困惑,因此请记住这一点。作为替代方案,我使用“适当的”查询字符串解析器函数:
<?php
function proper_parse_str($str) {
# result array
$arr = array();
# split on outer delimiter
$pairs = explode('&', $str);
# loop through each pair
foreach ($pairs as $i) {
# split into name and value
list($name,$value) = explode('=', $i, 2);
# if name already exists
if( isset($arr[$name]) ) {
# stick multiple values into an array
if( is_array($arr[$name]) ) {
$arr[$name][] = $value;
}
else {
$arr[$name] = array($arr[$name], $value);
}
}
# otherwise, simply stick it in a scalar
else {
$arr[$name] = $value;
}
}
# return result array
return $arr;
}
$query = proper_parse_str($_SERVER['QUERY_STRING']);
?>
Run Code Online (Sandbox Code Playgroud)
另外,如果您要查找当前文件名以及查询字符串,则只需执行以下操作
basename($_SERVER['REQUEST_URI'])
Run Code Online (Sandbox Code Playgroud)
它将为您提供信息,例如以下示例
file.php?arg1 = val&arg2 = val
而且,如果您还希望从根目录开始也要有完整的文件路径,例如/folder/folder2/file.php?arg1=val&arg2=val,则只需删除basename()函数,然后使用fillowing
$_SERVER['REQUEST_URI']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
753392 次 |
| 最近记录: |