phpで中国語文字列の長さを計算し、中国語文字列の関数コードを切り取ります。
1957 ワード
PHPでは専門のmb_があることを知っています。substrとmb_streen関数は、中国語の切り取りと計算ができますが、これらの関数はPHPのコア関数ではないので、常に開いていない可能性があります。もちろん、自分のサーバーを使うなら、php.iniでオープンすればいいです。もし使っているバーチャルホストで、サーバーがこの方面の関数を開けていないならば、私達自身で自分の国情に適する関数を書き出して来なければなりません。以下のいくつかの関数はとても使いやすいです。でも、知っておくには、utf-8環境で使わなければなりません。
header('Content-type:text/html;charset=utf-8');
/**
*
* @param $str
* @param $type ,0( ) ,1
*
*/
function abslength($str)
{
if(empty($str)){
return 0;
}
if(function_exists('mb_strlen')){
return mb_strlen($str,'utf-8');
}
else {
preg_match_all("/./u", $str, $ar);
return count($ar[0]);
}
}
$str = ' ,ye!';
$len = abslength($str);
var_dump($len); //return 12
$len = abslength($str,'1');
echo '<br />'.$len; //return 22
/*
utf-8 , substr
@param $str
@param $start ,
@param $end
*/
function utf8_substr($str,$start=0) {
if(empty($str)){
return false;
}
if (function_exists('mb_substr')){
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return mb_substr($str,$start,$end,'utf-8');
}
else {
mb_internal_encoding("UTF-8");
return mb_substr($str,$start);
}
}
else {
$null = "";
preg_match_all("/./u", $str, $ar);
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return join($null, array_slice($ar[0],$start,$end));
}
else {
return join($null, array_slice($ar[0],$start));
}
}
}
$str2 = 'wo zhongwen';
echo '<br />';
echo utf8_substr($str2,0,-4); //return wo zhon
はgb 2312、gbk、utf-8、big 5中国語の切り取り方法をサポートします。