PHP が英語の文字列をインターセプトする場合は、substr を直接使用するだけで簡単です。中国語は少し面倒です。
(1) マルチバイトを直接使用する。 function ライブラリの mb_substr(); 関数を使用するだけです。サンプルコードは次のとおりです
<?php echo mb_substr($str, $start, $length, $encoding); echo "<br />"; ?>この方法は、シンプルで、高速で、美しく、魅力的です。 . .とにかく、それを説明するにはどんな良い言葉でも使うことができますが、残念ながら私の GoDaddy ホストはそれをサポートしていないので、別の方法を見つける必要があります
(2) 中国語の文字列インターセプト関数をカスタマイズします。基本的には、mb_substr を模倣する関数を書いてそれを呼び出すだけです。次のように直接、私が見つけたコードは実際には非常に単純です
<?php function substr_cn($string_input,$start,$length) { /* 功能: * 此算法用于截取中文字符串 * 函数以单个完整字符为单位进行截取,即一个英文字符和一个中文字符均表示一个单位长度 * 参数: * 参数$string为要截取的字符串, * 参数$start为欲截取的起始位置, * 参数$length为要截取的字符个数(一个汉字或英文字符都算一个) * 返回值: * 返回截取结果字符串 * */ $str_input=$string_input; $len=$length; $return_str=""; //定义空字符串 for ($i=0;$i<2*$len+2;$i++) $return_str=$return_str." "; $start_index=0; //计算起始字节偏移量 for ($i=0;$i<$start;$i++) { if (ord($str_input{$start_index}>=161)) //是汉语 { $start_index+=2; } else //是英文 { $start_index+=1; } } $chr_index=$start_index; //截取 for ($i=0;$i<$len;$i++) { $asc=ord($str_input{$chr_index}); if ($asc>=161) { $return_str{$i}=chr($asc); $return_str{$i+1}=chr(ord($str_input{$chr_index+1})); $len+=1; //结束条件加1 $i++; //位置偏移量加1 $chr_index+=2; continue; } else { $return_str{$i}=chr($asc); $chr_index+=1; } } return trim($return_str); }//en