Php 计算ASCII和Unicode混合字符串中的字符数
用户名可以携带ASCII、Unicode或两者 示例: Jam123(ASCII)-6个字符Php 计算ASCII和Unicode混合字符串中的字符数,php,unicode,ascii,Php,Unicode,Ascii,用户名可以携带ASCII、Unicode或两者 示例: Jam123(ASCII)-6个字符 Unicode(Unicode)-3个字符,但strlen返回6个字节,因为Unicode是每个字符2个字节。 Jamت(Unicode和ASCII)-5个字符(3个ASCII和2个Unicode,尽管我只有一个Unicode字符) 在所有情况下,用户名不应超过25个字符,且不应少于4个字符 我的主要问题是,当将Unicode和ASCII混合在一起时,如何跟踪计数,以便条件语句能够判断用户名是否不超过2
Unicode(Unicode)-3个字符,但strlen返回6个字节,因为Unicode是每个字符2个字节。
Jamت(Unicode和ASCII)-5个字符(3个ASCII和2个Unicode,尽管我只有一个Unicode字符) 在所有情况下,用户名不应超过25个字符,且不应少于4个字符 我的主要问题是,当将Unicode和ASCII混合在一起时,如何跟踪计数,以便条件语句能够判断用户名是否不超过25且不小于4。
strlen($username);
if(strlen($username)使用。它负责unicode字符
例如:
if(strlen($username) <= 25 && !(strlen($username) < 4))
您可以在选择编码的地方使用mb_strlen
用UNICODE语句/字符串计数单词的函数:
<?php
echo mb_strlen('ابت', 'UTF8'); // returns 3
或
然后做:
出人意料的是,它成功了!我以前尝试过这个解决方案,但没有成功…我想我大概是输入错误了…总之,小补丁mb_strlen()…感谢您需要额外的软件包mbstring:sudo apt install php mbstring
所有的ASCII都是Unicode。并非所有的Unicode都是ASCII。@tchrist所有的ASCII都是UTF-8。并非所有的UTF-8都是ASCII。Unicode都不是。@user这对您来说可能是一本好书:谢谢您的建议…@deceze:您错了。ASCII是ISO-8859-1的子集,而ISO-8859-1是一个子集Unicode的et。Unicode是一个编码字符集。它将字符映射到代码。它的前128个代码点与另一个编码字符集ASCII使用的代码点完全相同。类似地,所有ISO 8859-1都是Unicode,但并非所有Unicode都是ISO 8859-1,因为Unicode的前256个代码点与拉丁语的所有代码点完全对应-1.此外,尽管Unicode具有类似于代理的代码点,这些代码点不能用一致的UTF-8表示,但一致的UTF-8不能表示非Unicode代码点。
<?php
echo mb_strlen('ابت', 'UTF8'); // returns 3
function mb_count_words($string)
{
preg_match_all('/[\pL\pN\pPd]+/u', $string, $matches); return count($matches[0]);
}
function mb_count_words($string, $format = 0, $charlist = '[]') {
$string=trim($string);
if(empty($string))
$words = array();
else
$words = preg_split('~[^\p{L}\p{N}\']+~u',$string);
switch ($format) {
case 0:
return count($words);
break;
case 1:
case 2:
return $words;
break;
default:
return $words;
break;
}
}
echo mb_count_words("chào buổi sáng");