strlen,mb_strlen,哪个用?

lov*_*ing 18 php

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

Ste*_*rig 19

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

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

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

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

编辑:(添加一些链接)

你可以阅读一些内容:


Rag*_*geZ 5

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

干杯