URL 辅助函数
最后更新于:2022-04-01 03:56:36
# URL 辅助函数
URL 辅助函数文件包含了一些帮助你处理 URL 的函数。
[TOC=2,3]
## [加载辅助函数](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#id3)
该辅助函数通过下面的代码加载:
~~~
$this->load->helper('url');
~~~
## [可用函数](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#id4)
该辅助函数有下列可用函数:
site_url([$uri = ''[, $protocol = NULL]])
参数:
* **$uri** (string) -- URI string
* **$protocol** (string) -- Protocol, e.g. 'http' or 'https'
返回: Site URL
返回类型: string
根据配置文件返回你的站点 URL 。index.php (获取其他你在配置文件中设置的 **index_page** 参数) 将会包含在你的 URL 中,另外再加上你传给函数的 URI 参数,以及配置文件中设置的 **url_suffix** 参数。
推荐在任何时候都使用这种方法来生成你的 URL ,这样在你的 URL 变动时你的代码将具有可移植性。
传给函数的 URI 段参数可以是一个字符串,也可以是个数组,下面是字符串的例子:
~~~
echo site_url('news/local/123');
~~~
上例将返回类似于:http://example.com/index.php/news/local/123
下面是使用数组的例子:
~~~
$segments = array('news', 'local', '123');
echo site_url($segments);
~~~
该函数是 CI_Config::site_url() 的别名,更多信息请查阅 [配置类](http://codeigniter.org.cn/user_guide/libraries/config.html) 文档。
base_url($uri = '', $protocol = NULL)
参数:
* **$uri** (string) -- URI string
* **$protocol** (string) -- Protocol, e.g. 'http' or 'https'
返回: Base URL
返回类型: string
根据配置文件返回你站点的根 URL ,例如:
~~~
echo base_url();
~~~
该函数和 [site_url()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#site_url "site_url") 函数相同,只是不会在 URL 的后面加上 index_page 或 url_suffix 。
另外,和 [site_url()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#site_url "site_url") 一样的是,你也可以使用字符串或数组格式的 URI 段。下面是字符串的例子:
~~~
echo base_url("blog/post/123");
~~~
上例将返回类似于:http://example.com/blog/post/123
跟 [site_url()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#site_url "site_url") 函数不一样的是,你可以指定一个文件路径(例如图片或样式文件),这将很有用,例如:
~~~
echo base_url("images/icons/edit.png");
~~~
将返回类似于:http://example.com/images/icons/edit.png
该函数是 CI_Config::base_url() 的别名,更多信息请查阅 [配置类](http://codeigniter.org.cn/user_guide/libraries/config.html) 文档。
current_url()
返回: The current URL
返回类型: string
返回当前正在浏览的页面的完整 URL (包括分段)。
注解
该函数和调用下面的代码效果是一样的: site_url(uri_string());
uri_string()
返回: An URI string
返回类型: string
返回包含该函数的页面的 URI 分段。例如,如果你的 URL 是:
~~~
http://some-site.com/blog/comments/123
~~~
函数将返回:
~~~
blog/comments/123
~~~
该函数是 CI_Config::uri_string() 的别名,更多信息请查阅 [配置类](http://codeigniter.org.cn/user_guide/libraries/config.html) 文档。
index_page()
返回: 'index_page' value
返回类型: mixed
返回你在配置文件中配置的 **index_page** 参数,例如:
~~~
echo index_page();
~~~
anchor($uri = '', $title = '', $attributes = '')
参数:
* **$uri** (string) -- URI string
* **$title** (string) -- Anchor title
* **$attributes** (mixed) -- HTML attributes
返回: HTML hyperlink (anchor tag)
返回类型: string
根据你提供的 URL 生成一个标准的 HTML 链接。
第一个参数可以包含任何你想添加到 URL 上的段,和上面的 [site_url()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#site_url "site_url") 函数一样,URL 的段可以是字符串或数组。
注解
如果你创建的链接是指向你自己的应用程序,那么不用包含根 URL (http://...)。 这个会根据你的配置文件自动添加到 URL 前面。所以你只需指定要添加的 URL 段就可以了。
第二个参数是链接的文本,如果留空,将使用链接本身作为文本。
第三个参数为你希望添加到链接的属性,可以是一个字符串,也可以是个关联数组。
这里是一些例子:
~~~
echo anchor('news/local/123', 'My News', 'title="News title"');
// Prints: <a href="http://example.com/index.php/news/local/123" title="News title">My News</a>
echo anchor('news/local/123', 'My News', array('title' => 'The best news!'));
// Prints: <a href="http://example.com/index.php/news/local/123" title="The best news!">My News</a>
echo anchor('', 'Click here');
// Prints: <a href="http://example.com">Click Here</a>
~~~
anchor_popup($uri = '', $title = '', $attributes = FALSE)
参数:
* **$uri** (string) -- URI string
* **$title** (string) -- Anchor title
* **$attributes** (mixed) -- HTML attributes
返回: Pop-up hyperlink
返回类型: string
和 [anchor()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#anchor "anchor") 函数非常类似,只是它生成的 URL 将会在新窗口被打开。你可以通过第三个参数指定 JavaScript 的窗口属性,以此来控制窗口将如何被打开。如果没有设置第三个参数,将会使用你的浏览器设置打开 一个新窗口。
这里是属性的例子:
~~~
$atts = array(
'width' => 800,
'height' => 600,
'scrollbars' => 'yes',
'status' => 'yes',
'resizable' => 'yes',
'screenx' => 0,
'screeny' => 0,
'window_name' => '_blank'
);
echo anchor_popup('news/local/123', 'Click Me!', $atts);
~~~
注解
上面的属性是函数的默认值,所以你只需要设置和你想要的不一样的参数。如果想使用所有默认的参数, 只要简单的传一个空数组即可: echo anchor_popup('news/local/123', 'Click Me!', array());
注解
**window_name** 其实并不算一个属性,而是 Javascript 的 window.open() 函数的一个参数而已, 该函数接受一个窗口名称或一个 window 对象。
注解
任何不同于上面列出来的其他的属性将会作为 HTML 链接的属性。
mailto($email, $title = '', $attributes = '')
参数:
* **$email** (string) -- E-mail address
* **$title** (string) -- Anchor title
* **$attributes** (mixed) -- HTML attributes
返回: A "mail to" hyperlink
返回类型: string
创建一个标准的 HTML e-mail 链接。例如:
~~~
echo mailto('me@my-site.com', 'Click Here to Contact Me');
~~~
和上面的 [anchor()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#anchor "anchor") 函数一样,你可以通过第三个参数设置属性:
~~~
$attributes = array('title' => 'Mail me');
echo mailto('me@my-site.com', 'Contact Me', $attributes);
~~~
safe_mailto($email, $title = '', $attributes = '')
参数:
* **$email** (string) -- E-mail address
* **$title** (string) -- Anchor title
* **$attributes** (mixed) -- HTML attributes
返回: A spam-safe "mail to" hyperlink
返回类型: string
和 [mailto()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#mailto "mailto") 函数一样,但是它的 mailto 标签使用了一个混淆的写法, 可以防止你的 e-mail 地址被垃圾邮件机器人爬到。
auto_link($str, $type = 'both', $popup = FALSE)
参数:
* **$str** (string) -- Input string
* **$type** (string) -- Link type ('email', 'url' or 'both')
* **$popup** (bool) -- Whether to create popup links
返回: Linkified string
返回类型: string
将一个字符串中的 URL 和 e-mail 地址自动转换为链接,例如:
~~~
$string = auto_link($string);
~~~
第二个参数用于决定是转换 URL 还是 e-mail 地址,默认情况不指定该参数,两者都会被转换。 E-mail 地址的链接是使用上面介绍的[safe_mailto()](http://codeigniter.org.cn/user_guide/helpers/url_helper.html#safe_mailto "safe_mailto") 函数生成的。
只转换 URL
~~~
$string = auto_link($string, 'url');
~~~
只转换 e-mail 地址:
~~~
$string = auto_link($string, 'email');
~~~
第三个参数用于指定链接是否要在新窗口打开。可以是布尔值 TRUE 或 FALSE
~~~
$string = auto_link($string, 'both', TRUE);
~~~
url_title($str, $separator = '-', $lowercase = FALSE)
参数:
* **$str** (string) -- Input string
* **$separator** (string) -- Word separator
* **$lowercase** (string) -- Whether to transform the output string to lower-case
返回: URL-formatted string
返回类型: string
将字符串转换为对人类友好的 URL 字符串格式。例如,如果你有一个博客,你希望使用博客的标题作为 URL , 这时该函数很有用。例如:
~~~
$title = "What's wrong with CSS?";
$url_title = url_title($title);
// Produces: Whats-wrong-with-CSS
~~~
第二个参数指定分隔符,默认使用连字符。一般的选择有:**-** (连字符) 或者 **_** (下划线)
例如:
~~~
$title = "What's wrong with CSS?";
$url_title = url_title($title, 'underscore');
// Produces: Whats_wrong_with_CSS
~~~
注解
第二个参数连字符和下划线的老的用法已经废弃。
第三个参数指定是否强制转换为小写。默认不会,参数类型为布尔值 TRUE 或 FALSE 。
例如:
~~~
$title = "What's wrong with CSS?";
$url_title = url_title($title, 'underscore', TRUE);
// Produces: whats_wrong_with_css
~~~
prep_url($str = '')
参数:
* **$str** (string) -- URL string
返回: Protocol-prefixed URL string
返回类型: string
当 URL 中缺少协议前缀部分时,使用该函数将会向 URL 中添加 http:// 。
像下面这样使用该函数:
~~~
$url = prep_url('example.com');
~~~
redirect($uri = '', $method = 'auto', $code = NULL)
参数:
* **$uri** (string) -- URI string
* **$method** (string) -- Redirect method ('auto', 'location' or 'refresh')
* **$code** (string) -- HTTP Response code (usually 302 or 303)
返回类型: void
通过 HTTP 头重定向到指定 URL 。你可以指定一个完整的 URL ,也可以指定一个 URL 段, 该函数会根据配置文件自动生成改 URL 。
第二个参数用于指定一种重定向方法。可用的方法有:**auto** 、 **location** 和 **refresh** 。 location 方法速度快,但是在 ISS 服务器上不可靠。默认值为**auto** ,它会根据你的服务器环境 智能的选择使用哪种方法。
第三个参数可选,允许你发送一个指定的 HTTP 状态码,这个可以用来为搜索引擎创建 301 重定向。 默认的状态码为 302 ,该参数只适用于**location** 重定向方法,对于 refresh 方法无效。例如:
~~~
if ($logged_in == FALSE)
{
redirect('/login/form/');
}
// with 301 redirect
redirect('/article/13', 'location', 301);
~~~
注解
为了让该函数有效,它必须在任何内容输出到浏览器之前被调用。因为输出内容会使用服务器 HTTP 头。
注解
为了更好的控制服务器头,你应该使用 输出类 的 set_header() 方法。
注解
使用 IIS 的用户要注意,如果你隐藏了 Server 这个 HTTP 头, auto 方法将无法检测到 IIS 。 在这种情况下,推荐你使用 **refresh** 方法。
注解
当使用 HTTP/1.1 的 POST 来访问你的页面时,如果你使用的是 **location** 方法,会自动使用 HTTP 303 状态码。
重要
该函数会终止脚本的执行。