首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strlen,mb_strlen,使用哪一个?

strlen,mb_strlen,使用哪一个?
EN

Stack Overflow用户
提问于 2009-09-19 04:01:48
回答 3查看 21.7K关注 0票数 23

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-19 12:44:32

长话短说:您并不真正了解通过GET或POST传递给PHP脚本的变量所使用的编码(字符集)(尤其是这里的GET是一个问题)。按照惯例,浏览器使用页面编码将表单发布到action-attribute中指定的服务器端资源,页面编码可以通过http-equiv元标记(HTML5中的charset元标记)或header指定。或者,在选择正确的编码时,一些浏览器还会考虑表单上的accept-charset-attribute。

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

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

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

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

下面是一些你需要阅读的内容:

  • The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
  • Handling UTF-8 with PHP
票数 22
EN

Stack Overflow用户

发布于 2009-09-19 04:03:34

使用mb_internal_encoding可以知道当前设置了哪种编码。如果你的应用程序使用不同编码的日志,你最好使用mb_strlen。

干杯

票数 5
EN

Stack Overflow用户

发布于 2009-09-19 05:13:52

通常情况下,您可以控制字符编码,因为您可以从发送给客户端的超文本标记语言创建$_REQUEST。

ie:它是由你从PHP发送的一个页面生成的。

因此,您应该不必检测编码。

使用mb_functions需要启用多字节扩展-所以如果你在分发代码,你必须意识到并不是每个人都会有它。

代码语言:javascript
复制
header('Content-Type: text/html; charset=UTF-8');

或者在HTML中:

代码语言:javascript
复制
<meta charset="utf-8">

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1447699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档