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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager