Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/main/chat/phpfreechat/lib/utf8/utf8_char2byte_pos.php

45 lines
1.2 KiB

<?php
/**
* Translates a character position into an 'absolute' byte position.
* Unit tested by Kasper.
* (http://phpxref.com/xref/moodle/lib/typo3/class.t3lib_cs.php.source.html.gz)
*
* @param string UTF-8 string
* @param integer Character position (negative values start from the end)
* @return integer Byte position
* @author Martin Kutschker <martin.t.kutschker@blackbox.net>
*/
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( ; 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 (!strlen($str{$i})) return false; // offset beyond string length
if ($pos >= 0) {
// skip trailing multi-byte data bytes
while ((ord($str{$i}) & 0x80) && !(ord($str{$i}) & 0x40)) { $i++; }
} else {
// correct offset
$i++;
}
return $i;
}
?>