input.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
  6. <title>输入类 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档</title>
  7. <link rel="shortcut icon" href="http://codeigniter.org.cn/user_guide/../images/design/favicon.ico" type="image/x-icon" />
  8. <link rel="stylesheet" type="text/css" media="all" href="../userguide.css" />
  9. <link rel="search" href="http://codeigniter.org.cn/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索"/>
  10. <link rel="canonical" href="http://codeigniter.org.cn/user_guide/libraries/input.html" />
  11. <script type="text/javascript" src="../nav/mootools.js-ver=20130324.js"></script>
  12. <script type="text/javascript" src="../nav/mootools-more.js-ver=20130324.js"></script>
  13. <script type="text/javascript" src="../nav/nav.js-ver=20130324.js"></script>
  14. <script type="text/javascript" src="../nav/user_guide_menu.js-ver=20130324.js"></script>
  15. <meta name="robots" content="all" />
  16. <meta name="author" content="ExpressionEngine Dev Team" />
  17. <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
  18. </head>
  19. <body>
  20. <!-- START NAVIGATION -->
  21. <div id="nav">
  22. <div id="nav_inner">
  23. <script type="text/javascript">create_menu('../');</script>
  24. </div>
  25. </div>
  26. <script type="text/javascript">_setNavigation();</script>
  27. <div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" /></a></div>
  28. <div id="masthead" class="clearfix">
  29. <div class="topbar-hd"><h1>CodeIgniter 用户指南 版本 2.2.0</h1></div>
  30. <div class="topbar-tip">编辑文档、查看近期更改请 <a href="#">登录</a> 或 <a href="#">注册</a>  <a href="#">找回密码</a></div> <div id="breadcrumb_right"><a href="../toc.html">目录页</a></div>
  31. </div>
  32. <!-- END NAVIGATION -->
  33. <!-- START BREADCRUMB -->
  34. <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
  35. <tr>
  36. <td id="breadcrumb">
  37. <a href="#" target="_blank">CodeIgniter 中国首页</a>&nbsp;&#8250;&nbsp;
  38. <a href="../index.html">用户指南首页</a>&nbsp;&#8250;&nbsp;输入类 </td>
  39. <td id="searchbox">
  40. <form method="get" action="http://www.google.com.hk/search" target="google_window">
  41. <input type="hidden" name="client" value="pub-0176846097796333"></input>
  42. <input type="hidden" name="forid" value="1"></input>
  43. <input type="hidden" name="ie" value="UTF-8"></input>
  44. <input type="hidden" name="oe" value="UTF-8"></input>
  45. <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
  46. 搜索用户指南&nbsp;
  47. <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
  48. &nbsp;
  49. <input type="submit" class="submit" name="sa" value="Go" />
  50. </form>
  51. </td>
  52. </tr>
  53. </table>
  54. <!-- END BREADCRUMB -->
  55. <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
  56. <a href="#" target="_blank">查看原文</a>
  57. </div>
  58. <!--<br clear="all" />--><!-- START CONTENT -->
  59. <div id="content">
  60. <h1>输入类</h1>
  61. <p>输入类有两个目的:</p>
  62. <ol>
  63. <li>为了安全,预处理输入数据。</li>
  64. <li>提供helper的一些方法,取得输入数据,并预处理输入数据。</li>
  65. </ol>
  66. <p class="important"><strong>说明:</strong> 系统自动加载此类,不用手动加载。</p>
  67. <h2>安全过滤(Security Filtering)</h2>
  68. <p>当触发一个<a href="../general/controllers.html">控制器</a>的时候,安全过滤(Security Filtering)功能自动启动。做以下事情:</p>
  69. <ul>
  70. <li>如果 $config['allow_get_array'] 的值为FALSE(默认为 TRUE), 销毁全局GET数组。</li>
  71. <li>当 register_globals 被设置为 on 的时候,销毁所有的全局变量。</li>
  72. <li>过滤 GET/POST/COOKIE 数组键,只允许字母-数字(以及一些其它的)字符。</li>
  73. <li>可以过滤跨站脚本攻击 (Cross-site Scripting Hacks) 此功能可全局打开(enabled globally),或者按要求打开。</li>
  74. <li>换行符统一换为 \n(Windows 下为 \r\n)</li>
  75. </ul>
  76. <h2>跨站脚本(XSS)过滤</h2>
  77. <p>输入类有能力阻止跨站脚本攻击。如果你想让过滤器遇到 POST 或者 COOKIE 数据时自动运行,你可以通过打开你的
  78. <kbd>application/config/config.php</kbd> 文件进行如下设置实现:</p>
  79. <code>$config['global_xss_filtering'] = TRUE;</code>
  80. <p>请参考 <a href="security.html">安全类</a> 文档以获得更多信息在你的应用中使用跨站脚本过滤。</p>
  81. <h2>使用 POST, COOKIE, 或 SERVER 数据</h2>
  82. <p>CodeIgniter 有3个 helper方法可以让用户取得POST, COOKIE 或 SERVER 的内容。用这些方法比直接使用php方法($_POST['something'])的好处是不用先检查此项目是不是存在。 直接使用php方法,必须先做如下检验:</p>
  83. <code>
  84. if ( ! isset($_POST['something']))<br />
  85. &#123;<br />
  86. &nbsp;&nbsp;&nbsp;&nbsp;$something = FALSE;<br />
  87. &#125;<br />
  88. else<br />
  89. &#123;<br />
  90. &nbsp;&nbsp;&nbsp;&nbsp;$something = $_POST['something'];<br />
  91. &#125;</code>
  92. <p>用CodeIgniter内建的方法,你可以这样:</p>
  93. <code>$something = $this-&gt;input-&gt;post('something');</code>
  94. <p>这3个方法是:</p>
  95. <ul>
  96. <li>$this-&gt;input-&gt;post()</li>
  97. <li>$this-&gt;input-&gt;cookie()</li>
  98. <li>$this-&gt;input-&gt;server()</li>
  99. </ul>
  100. <h2>$this-&gt;input-&gt;post()</h2>
  101. <p>第一个参数是所要取得的post中的数据:</p>
  102. <code>$this-&gt;input-&gt;post('some_data');</code>
  103. <p>如果数据不存在,方法将返回 FALSE (布尔值)。</p>
  104. <p>第二个参数是可选的,如果想让取得的数据经过跨站脚本过滤(XSS Filtering),把第二个参数设为TRUE。</p>
  105. <code>$this-&gt;input-&gt;post('some_data', TRUE);</code>
  106. <p>不设置任何参数,该方法将以一个数组的形式返回全部POST过来的数据。</p>
  107. <p>把第一个参数设置为NULL,第二个参数设置为 TRUE (boolean),该方法将经过跨站脚本过滤,返回一个包含全部POST数据的数组。</p>
  108. <p>如果POST没有传递任何数据,该方法将返回 FALSE (boolean)</p>
  109. <code>
  110. $this-&gt;input-&gt;post(NULL, TRUE); // 经过跨站脚本过滤 返回全部 POST 数据
  111. <br />
  112. $this-&gt;input-&gt;post(); // 不经过跨站脚本过滤 返回全部 POST 数据
  113. </code>
  114. <h2>$this-&gt;input-&gt;get()</h2>
  115. <p>此方法类似post方法,用来取得get数据:</p>
  116. <code>$this-&gt;input-&gt;get('some_data', TRUE);</code>
  117. <p>如果没有设置参数将返回GET的数组</p>
  118. <p>如果第一参数为NULL,且第二参数为True,则返回经过跨站脚本过滤(XSS Filtering)的数组。</p>
  119. <p>如果没有设从GET中取到数据将返回 FALSE (boolean)</p>
  120. <code>
  121. $this-&gt;input-&gt;get(NULL, TRUE); // 经过跨站脚本过滤 返回全部 GET 数据
  122. <br />
  123. $this-&gt;input-&gt;get(); // 不经过跨站脚本过滤 返回全部 GET 数据
  124. </code>
  125. <h2>$this-&gt;input-&gt;get_post()</h2>
  126. <p>这个方法将会搜索POST和GET方式的数据流,首先以POST方式搜索,然后以GET方式搜索:</p>
  127. <code>$this-&gt;input-&gt;get_post('some_data', TRUE);</code>
  128. <h2>$this-&gt;input-&gt;cookie()</h2>
  129. <p>此方法类似post方法,用来取得cookie数据:</p>
  130. <code>$this-&gt;input-&gt;cookie('some_data', TRUE);</code>
  131. <h2>$this-&gt;input-&gt;server()</h2>
  132. <p>此方法类似上面两个方法,用来取得server数据:</p>
  133. <code>$this-&gt;input-&gt;server('some_data');</code>
  134. <h2>$this-&gt;input-&gt;set_cookie()</h2>
  135. <p>设置一个 Cookie 的值。这个函数接收两种形式的参数:数组形式和参数形式:</p>
  136. <h4>数组形式</h4>
  137. <p style="border-bottom:1px solid red;">用这种形式的话,第一个参数传递的是一个关联数组:(重要:自己推荐)</p>
  138. <code>$cookie = array(<br />
  139. &nbsp;&nbsp;&nbsp;&nbsp;'name'&nbsp;&nbsp;&nbsp;=> 'The Cookie Name',<br />
  140. &nbsp;&nbsp;&nbsp;&nbsp;'value'&nbsp;&nbsp;=> 'The Value',<br />
  141. &nbsp;&nbsp;&nbsp;&nbsp;'expire' => '86500',<br />
  142. &nbsp;&nbsp;&nbsp;&nbsp;'domain' => '.some-domain.com',<br />
  143. &nbsp;&nbsp;&nbsp;&nbsp;'path'&nbsp;&nbsp;&nbsp;=> '/',<br />
  144. &nbsp;&nbsp;&nbsp;&nbsp;'prefix' => 'myprefix_',<br />
  145. &nbsp;&nbsp;&nbsp;&nbsp;'secure' => TRUE<br />
  146. );<br />
  147. <br />
  148. $this-&gt;input-&gt;set_cookie($cookie);
  149. </code>
  150. <p><strong>说明:</strong></p>
  151. <p>只有 name 和 value 是必须的。可以通过将 expire 设置成空来实现删除 Cookie 的操作。</p>
  152. <p>Cookie 的过期时间是以<strong>秒</strong>为单位来设置的,他是通过将 Cookie 的存续时间值加上当前系统时间来得到的。切记,expire 的值仅仅设置为Cookie 需要存续的时间长短,请不要将当前的系统时间加上存续时间后再赋给变量。如果将 expire 设置成零,那么 Cookie 仅在浏览器关闭的时候失效。</p>
  153. <p>如果需要设置全站范围内使用的cookie,无论你怎么请求都可以,那么你要把你的网站域名赋给$domain变量,并且需要以英文的句号"."开头,如: .your-domain.com</p>
  154. <p>path通常是不需要设置的,该方法设置path为网站的根目录。</p>
  155. <p>prefix(前缀)只有在为了避免和其它服务器上的相同命名的cookies冲突是才需要使用。 </p>
  156. <p>secure(安全)设置选项只有在你想把他设置成安全的cookie时,才需要把secure设置为 TRUE(boolean).</p>
  157. <h4>参数形式</h4>
  158. <p>你可以通过一个个单独的参数来设置cookies, 如果你喜欢的话:</p>
  159. <code>$this-&gt;input-&gt;set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);</code>
  160. <h2>$this-&gt;input-&gt;ip_address()</h2>
  161. <p>返回当前用户的IP。如果IP地址无效,返回0.0.0.0的IP:</p>
  162. <code>echo $this-&gt;input-&gt;ip_address();</code>
  163. <h2>$this-&gt;input-&gt;valid_ip(<var>$ip</var>)</h2>
  164. <p>测试输入的IP地址是不是有效,返回布尔值TRUE或者FALSE。 注意:$this-&gt;input-&gt;ip_address()自动测试输入的IP地址本身格式是不是有效。</p>
  165. <code>if ( ! $this-&gt;input-&gt;valid_ip($ip))<br />
  166. &#123;<br />
  167. &nbsp;&nbsp;&nbsp;&nbsp; echo 'Not Valid';<br />
  168. &#125;<br />
  169. else<br />
  170. &#123;<br />
  171. &nbsp;&nbsp;&nbsp;&nbsp; echo 'Valid';<br />
  172. &#125;</code>
  173. <p>可以通过第二个可选参数 "IPv4" 或 "IPv6" 来指定 IP 地址格式。默认两种格式都检查。</p>
  174. <h2>$this-&gt;input-&gt;user_agent()</h2>
  175. <p>返回当前用户正在使用的浏览器的user agent信息。 如果不能得到数据,返回FALSE。</p>
  176. <code>echo $this-&gt;input-&gt;user_agent();</code>
  177. <p>查看<a href="user_agent.html">User Agent Class</a>了解在user agent字符串中该方法的更多扩展信息。</p>
  178. <h2>$this-&gt;input-&gt;request_headers()</h2>
  179. <p>在不支持<a href="#">apache_request_headers()</a>的非Apache环境非常有用。返回请求头(header)数组。</p>
  180. <code>$headers = $this-&gt;input-&gt;request_headers();</code>
  181. <h2>$this-&gt;input-&gt;get_request_header();</h2>
  182. <p>返回请求头(request header)数组中某一个元素的值</p>
  183. <code>$this-&gt;input-&gt;get_request_header('some-header', TRUE);</code>
  184. <h2>$this-&gt;input-&gt;is_ajax_request()</h2>
  185. <p>检查服务器头<var>HTTP_X_REQUESTED_WITH</var>是否被设置,并返回布尔值。</p>
  186. <code>$this-&gt;input-&gt;is_ajax_request()</code>
  187. <h2>$this-&gt;input-&gt;is_cli_request()</h2>
  188. <p>检查看常量<var>STDIN</var>是否被设置, 这只是一个检查PHP是否以命令行方式运行的应急方法。</p>
  189. <code>$this-&gt;input-&gt;is_cli_request()</code><p>&nbsp;</p>
  190. <div id="Contributors">
  191. 翻译贡献者:
  192. 377210718, architectcom, csfhc, Hex, hk_yuhe, IT不倒翁, loiynet, qiutao520, soyota, sunjiaxi, xjflyttp, yinzhili, yzheng624, 暗夜星辰, 月夜之人</div>
  193. <div id="DocDate">
  194. 最后修改: 2014-05-06 11:20:29</div>
  195. </div>
  196. <!-- END CONTENT -->
  197. <div id="footer">
  198. <p>
  199. 上一个主题:&nbsp;&nbsp;<a href="image_lib.html">图像处理类</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;<a href="#top">页首</a>
  200. &nbsp;&middot;&nbsp;&nbsp;<a href="../index.html">用户指南首页</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;下一个主题:&nbsp;&nbsp;<a href="loader.html">装载器类</a> </p>
  201. <p><a href="#">CodeIgniter</a> &nbsp;&middot;&nbsp; 版权所有 &#169; 2006-2013 &nbsp;&middot;&nbsp; <a href="#">Ellislab, Inc.</a></p>
  202. <p>中文化: <a href="#">CodeIgniter 中国</a> &nbsp;&middot;&nbsp; 制作: Hex &nbsp;&middot;&nbsp; 版本: 1.30 &nbsp;&middot;&nbsp; 鸣谢: 子非鱼</p>
  203. </div>
  204. </body>
  205. </html>