note 55708 added to function.substr

From: Date: Thu, 11 Aug 2005 05:12:09 +0000
Subject: note 55708 added to function.substr
Groups: php.notes 
Request: Send a blank email to php-notes+get-93406@lists.php.net to get a copy of this message
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"; ?> ---- Manual Page -- http://www.php.net/manual/en/function.substr.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+55708 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+55708&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+55708&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+55708&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+55708&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+55708&report=yes&reason=non-english Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+55708&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+55708&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#93406) next »