htouch
(Htouch)
1
数据库和应用程序使用UTF-8字符集,
表中有一个类型为char(2)的字段,
model中,验证规则为:
array('name', 'length', 'max'=>2)
表单view中条目如下:
CHtml::activeTextField($model,'name',array('size'=>20,'maxlength'=>2))
而当我仅输入一个汉字时,就得到input errors:
Name is too long (maximum is 2 characters).
可能把这个汉字按3个char算了,请问如何解决这个问题?
jerry2801
(Jerry2801)
2
如果你希望可以存储两个汉字的话,那么字段设计应该是 char(6) 因为utf8占用3个字节
htouch
(Htouch)
3
我在MySql中的字段定义就是Char(2),数据库是UTF-8字符集的。这个字段一直存储的也是两个汉字。
pangjanne
(Pngjanne)
6
数据库中char(2)是定义了2个字符,即使是两个汉字,也算是2个字符,char(2)并非指存储2个字节的数据。而php中的验证,你因该改成’max’=>6,php在计算字节长度(而非字符)。
你验证一下,我依稀是这样记得。
Y11
(Y!!)
8
Put into your php.ini or modify accordingly:
mbstring.func_overload = 7
wwwwwgq
(Wgq91here)
12
mbString 扩展函数 应该是 mb_strlen() 上面我写错了
htouch
(Htouch)
13
问题解决了!
还是在 php.ini 文件的设置上。
在[mbstring]部分,不仅加入:
mbstring.func_overload = 7
再设置一句(在我的php.ini中,这句之前是注释掉的):
mbstring.internal_encoding = UTF-8
这回我的汉字都是按照汉字的字符个数来计数了:
strlen(‘aa’) 的值是 2
strlen(‘阿阿’) 的值是 2
strlen(‘aa阿阿’) 的值是 4
我的环境是: Linux(Ubuntu) & XAMPP1.7.1
感谢大家给我指明了解决问题的方向。