2012-02-13 85 views
2

我想获得Shift-jis和Utf-8的strlen(),然后比较它们。 一个字符串可以混合使用“ああ12345678sdfdszzz”。我试图使用strlen,但它会产生不同的结果。 mb_strlen也没有帮助,因为这是一个混合字符串。如何strlen多语言字符串

例如:

ああ12345678 >> strlen() = 24 chars 
ああああああああああああああああ >> strlen() = 48 chars 
ああああああああああああああああああ >> strlen() = 54 chars 

这似乎是没有规则。那么什么是最好的方式来计算strlen和比较它们在多语言

+0

从你的例子来看,'あ'在后两个例子是3每个字节(可能是UTF-8)。但这与第一个例子并不完全相关。那么这些字符串究竟是如何构建的? – Gumbo 2012-02-13 07:27:55

+0

那个角色是平假名。我在ubuntu上使用ibus键盘输入。我不知道为什么它是3个字节。我认为它必须是2个字节。我想知道这是否有一个真正的规则。 – Emerald214 2012-02-13 07:34:35

回答

5

strlen只计算字节数,因此仅用于single-byte character encodings;请使用mb_strlen代替multi-byte character encodings,以代替实际字符。

+0

它是一个混合字符串,我应该传递给mb_strlen什么编码? utf8或sjis?如果他们键入5种语言会怎样? – Emerald214 2012-02-13 07:04:28

+0

那么字符编码如何混合?请注意,US-ASCII是UCS的一个真正的子集,并且在US-ASCII和UTF-8中都是精确编码的。 – Gumbo 2012-02-13 07:08:48

+0

我很抱歉,您将传递给mb_strlen的编码是什么?我的意思是mb_strlen的第二个参数。 – Emerald214 2012-02-13 07:15:38

0
$field = $_POST['field']; 
$field_length = mb_strlen($field,'utf-8');