# URL 辅助函数

URL 辅助函数文件包含了一些帮助你处理 URL 的函数。

- 加载辅助函数
- 可用函数

## 加载辅助函数

该辅助函数通过下面的代码加载:

    $this->load->helper('url');

## 可用函数

该辅助函数有下列可用函数：

`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()` 的别名，更多信息请查阅 配置类 文档。

`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()` 函数相同，只是不会在 URL 的后面加上 index_page 或 url_suffix 。

  另外，和 `site_url()` 一样的是，你也可以使用字符串或数组格式的 URI 段。下面是字符串的例子:

      echo base_url("blog/post/123");

  上例将返回类似于：http://example.com/blog/post/123

  跟 `site_url()` 函数不一样的是，你可以指定一个文件路径（例如图片或样式文件），这将很有用，例如:

      echo base_url("images/icons/edit.png");

  将返回类似于：http://example.com/images/icons/edit.png

  该函数是 `CI_Config::base_url()` 的别名，更多信息请查阅 配置类 文档。

`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()` 的别名，更多信息请查阅 配置类 文档。

`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()` 函数一样，URL 的段可以是字符串或数组。

  注解

  如果你创建的链接是指向你自己的应用程序，那么不用包含根 URL （http&#58;//...）。 这个会根据你的配置文件自动添加到 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()` 函数非常类似，只是它生成的 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() <http://www.w3schools.com/jsref/met_win_open.asp> 函数的一个参数而已， 该函数接受一个窗口名称或一个 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()` 函数一样，你可以通过第三个参数设置属性:

      $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()` 函数一样，但是它的 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()` 函数生成的。

  只转换 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 (bool) -- 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&#58;// 。

  像下面这样使用该函数:

      $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 状态码。

  重要

  该函数会终止脚本的执行。