this is my proposition of this function:
- Code: Select all
if (!function_exists('utf8_char2byte_pos')) {
function utf8_char2byte_pos($str,$pos) {
$n = 0; // number of characters found
$p = abs($pos); // number of characters wanted
if ($pos >= 0) {
$i = 0;
$d = 1;
} else {
$i = strlen($str)-1;
$d = -1;
}
for( ; isset($str{$i})&&strlen($str{$i}) && $n<$p; $i+=$d) {
$c = (int)ord($str{$i});
if (!($c & 0x80)) // single-byte (0xxxxxx)
$n++;
elseif (($c & 0xC0) == 0xC0) // multi-byte starting byte (11xxxxxx)
$n++;
}
if (isset($str{$i})&&!strlen($str{$i})) return false; // offset beyond string length
if ($pos >= 0) {
// skip trailing multi-byte data bytes
if(isset($str{$i})){
while ((ord($str{$i}) & 0x80) && !(ord($str{$i}) & 0x40)) { $i++; }
}
} else {
// correct offset
$i++;
}
return $i;
}
}