php使用parse

 本文主要向大家介绍了php中2个解析URL的方法(parse_url和parse_str),以及这2种方法的简介和用法,十分全面,推荐给有需要的小伙伴们。

 
 

PHP中有两个方法可以用来解析URL,分别是parse_url和parse_str。

parse_url
解析 URL,返回其组成部分

mixed parse_url ( string $url [, int $component = -1 ] )

本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。

本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。不完整的 URL 也被接受,parse_url() 会尝试尽量正确地将其解析。

参数

url 要解析的 URL。无效字符将使用 _ 来替换。

component 指定 PHP_URL_SCHEME、 PHP_URL_HOST、 PHP_URL_PORT、 PHP_URL_USER、 PHP_URL_PASS、 PHP_URL_PATH、 PHP_URL_QUERY 或 PHP_URL_FRAGMENT 的其中一个来获取 URL 中指定的部分的 string。 (除了指定为 PHP_URL_PORT 后,将返回一个 integer 的值)。

返回值

对严重不合格的 URL,parse_url() 可能会返回 FALSE。

如果省略了 component 参数,将返回一个关联数组 array,在目前至少会有一个元素在该数组中。数组中可能的键有以下几种:

scheme - 如 http
host
port
user
pass
path
query - 在问号 ? 之后
fragment - 在散列符号 # 之后
如果指定了 component 参数, parse_url() 返回一个 string (或在指定为 PHP_URL_PORT 时返回一个 integer)而不是 array。如果 URL 中指定的组成部分不存在,将会返回 NULL。

实例

 

代码如下:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>

 

以上例程会输出:

 

代码如下:

Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
/path

 

parse_str

将字符串解析成多个变量

void parse_str ( string $str [, array &$arr ] )

如果 str 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。

获取当前的 QUERY_STRING,你可以使用 $_SERVER['QUERY_STRING'] 变量。

参数

str 输入的字符串。

arr 如果设置了第二个变量 arr,变量将会以数组元素的形式存入到这个数组,作为替代。、

实例

 

代码如下:

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
?>

 

前一段时间在读php-resque的源码,看到了在其中对这两个的方法的应用,感觉用的很好,用来解析redis链接的设置。

redis链接的格式是:redis://user:pass@host:port/db?option1=val1&option2=val2,是不是和URL一样,所以用以上两个方法很容易解析。

地址: https://github.com/chrisboulton/php-resque/blob/master/lib/Resque/Redis.php

代码如下:

 

代码如下:

/**
* Parse a DSN string, which can have one of the following formats:
*
* - host:port
* - redis://user:pass@host:port/db?option1=val1&option2=val2
* - tcp://user:pass@host:port/db?option1=val1&option2=val2
*
* Note: the 'user' part of the DSN is not used.
*
* @param string $dsn A DSN string
* @return array An array of DSN compotnents, with 'false' values for any unknown components. e.g.
* [host, port, db, user, pass, options]
*/
public static function parseDsn($dsn)
{
if ($dsn == '') {
// Use a sensible default for an empty DNS string
$dsn = 'redis://' . self::DEFAULT_HOST;
}
$parts = parse_url($dsn);
// Check the URI scheme
$validSchemes = array('redis', 'tcp');
if (isset($parts['scheme']) && ! in_array($parts['scheme'], $validSchemes)) {
throw new InvalidArgumentException("Invalid DSN. Supported schemes are " . implode(', ', $validSchemes));
}
// Allow simple 'hostname' format, which `parse_url` treats as a path, not host.
if ( ! isset($parts['host']) && isset($parts['path'])) {
$parts['host'] = $parts['path'];
unset($parts['path']);
}
// Extract the port number as an integer
$port = isset($parts['port']) ? intval($parts['port']) : self::DEFAULT_PORT;
// Get the database from the 'path' part of the URI
$database = false;
if (isset($parts['path'])) {
// Strip non-digit chars from path
$database = intval(preg_replace('/[^0-9]/', '', $parts['path']));
}
// Extract any 'user' and 'pass' values
$user = isset($parts['user']) ? $parts['user'] : false;
$pass = isset($parts['pass']) ? $parts['pass'] : false;
// Convert the query string into an associative array
$options = array();
if (isset($parts['query'])) {
// Parse the query string into an array
parse_str($parts['query'], $options);
}
return array(
$parts['host'],
$port,
$database,
$user,
$pass,
$options,
);
}

 

上面所述就是PHP解析URL的2种方法了,希望小伙伴们能够喜欢。

时间: 2024-08-28 05:07:59

php使用parse的相关文章

Convert、Parse、TryParse、(int) 的区别

1. (int)变量名[强制类型转换]:       该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显式转换,也就是该数据类型转换方式,否则会产生编译错误.       该方式对于浮点数会做无条件舍去,失去精确度       当然,该方式也可以进行object到int得转换,但是,object的值要赋予int类型的值,否则会产生编译错误,而且object为null时也会出错.    

php解析url (parse

通过php获取了当前url,如果需要提取url中的参数的话该如何操作呢?这个过程其实挺简单,使用php的两个内置函数就可以顺利完成,即parse_url和parse_str函数.下面将对这两个函数做简要说明以及用示例说明如何提取url中的参数. (1)parse_url (PHP 4, PHP 5) - 解析 URL,返回其组成部分,函数原型如下: mixed parse_url ( string $url [, int $component = -1 ] ) 本函数解析一个 URL 并返回一个

parse 方法

  解析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数. Date.parse(dateVal) 其中必选项 dateVal 是一个包含以诸如 "Jan 5, 1996 08:47:00" 的格式表示的日期的字符串,或者是一个从 ActiveX(R) 对象或其他对象中获取的 VT_DATE 值. 说明 parse 方法返回一个整数值,这个整数表示 dateVal 中所包含的日期与 1970 年 1 月 1 日午夜之间相间隔的毫秒数. parse

来自AskTom的关于Soft Parse的解释

There are two types of parses (well, actually "three" these days). They are o HARD parse -- the query has never been seen before, isn't in the shared pool.  We must parse it, hash it, look in the shared pool for it, don't find it, security check

Numeric Parse Method

The Parse method converts a string that represents a .NET Framework numeric base type to an actual .NET Framework numeric base type. It takes the following forms, where XXX is the name of the numeric base data-type class: public static XXX Parse(Stri

做项目时使用JSON.parse遇到的问题

今天做项目的时候,使用JSON.parse转换字符串成json数据的时候遇到了一个问题, 举例如下: 1 var jsonStr = '{"sex":"男","info":"我\\是好人"}'; 2 JSON.parse(jsonStr); 运行结果如下:   jsonStr里有两个反斜杠存在,JSON.parse在执行的时候则报错了,我们用eval来执行自然是不会报错的,运行结果如下: 我们再来看一下下面这三行代码: 1 v

面向Android应用程序的基于Parse云的服务

Parse 移动 SDK 为 iOS.Android 和 Windows 应用程序提供了基于云的 API 和服务.Parse SDK 还提供 了 JavaScript 和 REST API.使用 Parse API,您可以极快地以最少工作量让您的移动应用程序支持云处理 .集成了 Parse API 的移动应用程序可以轻松地在 Parse 云上存储数据对象和文件,发送并侦听推送通知, 管理用户,处理地理位置数据,并使用 Twitter 和 Facebook 等社交媒体平台.对于需要扩展的移动应用程

JavaScript中的parse()方法使用简介

 Javascript Date.parse() 方法接受一个日期字符串,并返回自1970年1月1日午夜的毫秒数. 语法 1 Date.parse(datestring) 注:括号内的数据是可选的 下面是参数的详细信息: datestring : 一个字符串,表示日期 返回值: 自1970年1月1日午夜的毫秒数. 例子: 1 2 3 4 5 6 7 8 9 10 11 <html> <head> <title>JavaScript parse Method</ti

转义字符(\)对JavaScript中JSON.parse的影响概述

JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合json标准的字符串,后者将符合json标准的字符串转化为js对象,本文为大家介绍下转义字符对JSON.parse方法的影响   按照ECMA262第五版中的解释,JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合json标准的字 符串,后者将符合json标准的字符串转化为js对象.json标准参考<a href="http://json.org/&qu