compréhension fonction drupal
Je me suis dans Drupal, je suis tombé dans une fonction php , et il y a un bout de code que je n'arrive pas à comprendre
Je sais que le but est d'extraire x caractères a partir d'un position, mais il des choses que je n'arrive pas a comprende
Que signifie UNICODE_MULTIBYTE pour drupal ?
Que font ces lignes de codes :
<<<
Code:
1 2 3 4
| $c = ord($text[$bytes]);
if ($c < 0x80 || $c >= 0xC0) {
$chars++;
} |
>>>
fct ord() retournerait le caractère ascii d'un caractère
0x80 et 0xC0 , je pense que sont des caractères hexadecimal, mais à quoi correspondent'ils ?
Pourquoi fait'on un "si caractère ascii < caractère decimal " ( $c < 0x80 ) ???
Je suis complètement à la ramasse la dessus
La fonction complète au cas ou :
<<<
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| function drupal_substr($text, $start, $length = NULL) {
global $multibyte;
if ($multibyte == UNICODE_MULTIBYTE) {
return $length === NULL ? mb_substr($text, $start) : mb_substr($text, $start, $length);
}
else {
$strlen = strlen($text);
// Find the starting byte offset
$bytes = 0;
if ($start > 0) {
// Count all the continuation bytes from the start until we have found
// $start characters
$bytes = -1; $chars = -1;
while ($bytes < $strlen && $chars < $start) {
$bytes++;
$c = ord($text[$bytes]);
if ($c < 0x80 || $c >= 0xC0) {
$chars++;
}
}
}
else if ($start < 0) {
// Count all the continuation bytes from the end until we have found
// abs($start) characters
$start = abs($start);
$bytes = $strlen; $chars = 0;
while ($bytes > 0 && $chars < $start) {
$bytes--;
$c = ord($text[$bytes]);
if ($c < 0x80 || $c >= 0xC0) {
$chars++;
}
}
}
$istart = $bytes;
// Find the ending byte offset
if ($length === NULL) {
$bytes = $strlen - 1;
}
else if ($length > 0) {
// Count all the continuation bytes from the starting index until we have
// found $length + 1 characters. Then backtrack one byte.
$bytes = $istart; $chars = 0;
while ($bytes < $strlen && $chars < $length) {
$bytes++;
$c = ord($text[$bytes]);
if ($c < 0x80 || $c >= 0xC0) {
$chars++;
}
}
$bytes--;
}
else if ($length < 0) {
// Count all the continuation bytes from the end until we have found
// abs($length) characters
$length = abs($length);
$bytes = $strlen - 1; $chars = 0;
while ($bytes >= 0 && $chars < $length) {
$c = ord($text[$bytes]);
if ($c < 0x80 || $c >= 0xC0) {
$chars++;
}
$bytes--;
}
}
$iend = $bytes;
return substr($text, $istart, max(0, $iend - $istart + 1));
}
} |
>>>
Merci beaucoup pour votre aide