Update of /home/spip-cvs/spip/ecrire
In directory miel:/tmp/cvs-serv25979/ecrire
Modified Files:
inc_charsets.php3
Log Message:
bug depassement memoire si indexation de tres gros texte
Index: inc_charsets.php3
RCS file: /home/spip-cvs/spip/ecrire/inc_charsets.php3,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- inc_charsets.php3 27 Sep 2003 01:00:11 -0000 1.34
+++ inc_charsets.php3 21 Oct 2003 17:01:43 -0000 1.35
@@ -482,12 +482,17 @@
// UTF-32 : utilise en interne car plus rapide qu'UTF-8
function utf_32_to_unicode($source) {
- $words = unpack("V*", $source);
- if (is_array($words)) {
- reset($words);
- while (list(, $word) = each($words)) {
- if ($word < 128) $texte .= chr($word);
- else if ($word != 65279) $texte .= '&#'.$word.';';
+ $texte = "";
+ // Plusieurs iterations pour eviter l'explosion memoire
+ while ($source) {
+ $words = unpack("V*", substr($source, 0, 1024));
+ $source = substr($source, 1024);
+ if (is_array($words)) {
+ reset($words);
+ while (list(, $word) = each($words)) {
+ if ($word < 128) $texte .= chr($word);
+ else if ($word != 65279) $texte .= '&#'.$word.';';
+ }
}
}
return $texte;
fil
Octobre 21, 2003, 6:44
2
inc_charsets.php3
Log Message:
bug depassement memoire si indexation de tres gros texte
Index: inc_charsets.php3
+ // Plusieurs iterations pour eviter l'explosion memoire
+ while ($source) {
+ $words = unpack("V*", substr($source, 0, 1024));
+ $source = substr($source, 1024);
Tu coupes un peu n'importe où, là, non ? Au milieu d'un mot par exemple...
-- Fil
Le mar 21/10/2003 à 20:44, Fil a écrit :
> inc_charsets.php3
> Log Message:
> bug depassement memoire si indexation de tres gros texte
>
> Index: inc_charsets.php3
> ===================================================================
> + // Plusieurs iterations pour eviter l'explosion memoire
> + while ($source) {
> + $words = unpack("V*", substr($source, 0, 1024));
> + $source = substr($source, 1024);
Tu coupes un peu n'importe où, là, non ? Au milieu d'un mot par exemple...
Ben, on s'en fout, c'est juste la transformation du charset, la chaîne
est reconstruite après (sauf bug).
fil
Octobre 22, 2003, 8:11
4
> > + while ($source) {
> > + $words = unpack("V*", substr($source, 0, 1024));
> > + $source = substr($source, 1024);
>
> Tu coupes un peu n'importe où, là, non ? Au milieu d'un mot par exemple...
Ben, on s'en fout, c'est juste la transformation du charset, la chaîne
est reconstruite après (sauf bug).
Correction : tu risques de couper au milieu d'un *caractère*. A moins que...
l'utf-32 et 1024 ça tombe forcémeent pile poil, c'est ça ?
-- Fil