GET变量的Strlen

时间:2014-11-07 09:49:23

标签: php get

我的网站上有一个奇怪的错误: 我在网址?getClass=9а中有一个get变量 出于某种原因,当我输出它的strlen时,它比实际上多1个符号。 例如:
9a strlen - 3
10a strlen - 4
11a strlen - 4
另一个奇怪的事情是,当我尝试使用它的strlen子串:

$classNumber=substr($_GET['getClass'],0,strlen($_GET['getClass']-1));
$classLetter=substr($_GET['getClass'], strlen($_GET['getClass']-1));

结果是这样的: 9a $ classNumber = 9 $ classLetter =а这没关系 10 $ $ classNumer = 1 $ classLetter = 0a这是错误的 11a $ classNumber = 11 $ classLetter = a再次没问题。 怎么了?

2 个答案:

答案 0 :(得分:4)

你应该从strlen结果中减去 -1 而不是字符串。

$classNumber=substr($_GET['getClass'],0,strlen($_GET['getClass'])-1);
$classLetter=substr($_GET['getClass'], strlen($_GET['getClass'])-1);

答案 1 :(得分:2)

此正确答案最初由user4035发布,但由于某种原因而被低估并删除。


这种行为的原因是你使用的是西里尔语“а”,而不是拉丁语。它被认为是一个unicode字符,用2个字节表示。您需要使用mb_strlen功能:

<?php
print strlen($_GET['getClass'])."<br>";
print mb_strlen($_GET['getClass'], 'utf8');

输入:“9”它将打印:

3
2

但是如果使用纯ASCII,则函数将得到相同的结果:

的getClass = 99

2
2