for循环中的strlen和非拉丁字符

时间:2012-01-22 19:42:56

标签: php

我有一个HTML表单,使用post将索索索发送到我的PHP文件。

我试过strlen,但它给了我24而不是3(?!)......然后这就打破了我的for循环:

$in=$_POST['inn'];
$length=strlen($in)
for ($i=0; $i<$length; $i++) {
$cleanchar=$in[$i];
}

我希望cleanchar作为一个单独的角色,就像只有一个角色通过POST发送一样。

如何使用PHP分隔每个字符?

2 个答案:

答案 0 :(得分:2)

尝试使用mb_strlen进行多字节字符操作:

echo mb_strlen('索索索', 'utf-8'); // or omit second parameter or change to your encoding

来自文档:

  

返回字符串str中具有字符编码编码的字符数。多字节字符计为1。

http://php.net/manual/en/function.mb-strlen.php

答案 1 :(得分:0)

你的表格没有发送三个字符,它发送三个sequences序列(其中12345是这些符号的字符代码 - 我不知道它实际是什么)。

这是八个字符,乘以三个符号,字符串长度为24。

如果您要运行echo htmlspecialchars($_POST['inn']);,您可以清楚地看到这种效果。

我很确定有办法解决这个问题......我认为您需要确保文档字符集是<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />部分中的UTF-8:<head>

即便如此,根据这些符号的字节长度,您将获得69的长度,因为这是strlen测量的内容。