note 55708 deleted from function.substr by nlopess

From: Date: Thu, 11 Aug 2005 11:43:06 +0000
Subject: note 55708 deleted from function.substr by nlopess
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-93429@lists.php.net to get a copy of this message
Note Submitter: webmaster at phptree dot com Reason: useless ---- substr is not safe to multibyte characters. perhaps,you can do like this: <?php /** * string mysubstr(string $string,int $start[,int $length]) * @param string $string input mutibyte string * @param int $start start offset * @param int $length the length you want to get */ function mysubstr($string,$start,$length='') { $tmpstr = ''; $str = ''; if($start<0)$start+=strlen($string); if($length<0) { $offset = strlen($string)+$length; } else { $offset = min(strlen($string),$start+$length); } for($i=0;$i<$offset;$i++){ if (ord($string{$i})>127){ if($i<$start) { $i++; continue; } $tmpstr = $string{$i}.$string{++$i};//it is much faster than substr($string,$i,2); }else{ if($i<$start)continue; $tmpstr = $string{$i}; } $str .= $tmpstr; } return $str; } $string ="¶à×Ö½Ú×Ö·û´®multibyte string¶à×Ö½Ú×Ö·û´®multibyte string";//string that contains GB2312 characters echo mysubstr($string,0,18); echo "<br>\r\n"; echo mysubstr($string,18,18); echo "<br>\r\n"; echo mysubstr($string,36,18); echo "<br>\r\n"; echo mysubstr($string,54,18); echo "<br>\r\n"; echo mysubstr($string,-36,-5); echo "<br>\r\n"; ?>

« previous php.notes (#93429) next »