strlen,mb_strlen,哪个用?

时间:2009-09-19 04:01:48

标签: php

我怎么知道$ _REQUEST中的字符集? 以及如何设置$ _REQUEST的字符集?

3 个答案:

答案 0 :(得分:18)

简而言之:您并不真正了解通过GET或POST传递给PHP脚本的变量所使用的编码(字符集)(尤其是GET是一个问题)。按照惯例,浏览器POST使用页面编码形成action - 属性中指定的服务器端资源,可以通过http-equiv - 元标记(charset - 元标记指定在HTML5)或通过HTTP标头。或者,某些浏览器在选择正确的编码时也会尊重表单上的accept-charset - 属性。

GET参数的编码和URL本身取决于浏览器的输入,因此可以由用户控制。您不应该依赖特定的编码。

通常,您可以通过始终如一地使用UTF-8并通过在HTTP标头(Content-Type: text/html; charset=UTF-8)中指定正确的编码来环绕大多数与编码相关的问题 - 这将产生正确的编码(UTF-8) )在传递给你的字符串的所有变量中(我们不是在谈论故意试图弄乱编码以允许一些攻击向量进入你的脚本的胭脂脚本)。您也不应该依赖GET参数或URL中的非ascii字符(这也是SEO友好链接删除这些字符或替换它们的原因)。

如果您确定UTF-8是唯一允许的字符集,则可以使用mb_strlen($string, 'UTF-8')来检查变量的长度。

编辑:(添加了一些链接)

您可以阅读以下内容:

答案 1 :(得分:5)

使用mb_internal_encoding了解当前设置的编码。如果您的应用程序使用不同编码的日志,则最好使用mb_strlen。

干杯

答案 2 :(得分:1)

通常您可以控制字符编码,因为您从发送给客户端的HTML中创建了$ _REQUEST。

ie:它是由您从PHP发送的页面生成的。

因此,您不必检测编码。

使用mb_functions需要启用多字节扩展名 - 所以如果你要分发代码,你必须知道不是每个人都会拥有它。

header('Content-Type: text/html; charset=UTF-8');

HTML中的OR:

<meta charset="utf-8">

http://www.w3.org/International/O-charset

编辑:PHP6支持utf-8,而不支持PHP5。