Newsgroup: it.comp.www.php
Titolo: htmlentities e l'euro

Ho notato che in PHP 4.2.3 htmlentities non converte il simbolo dell'euro in
&euro;
C'è modo di aggiornare la tabella di conversione di questa funzione?
Ciao,
Nico

 C'è modo di aggiornare la tabella di conversione di questa funzione?
il workaround semplice ma noioso:
$stringa=str_replace(chr(128),"&euro",$stringa);
il workaround complesso:
ricompilare dopo aver modificato la funzione che segue in
$srcphp/ext/html/standard/html.c
PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, 
int *newlen, int all, int quote_style)
{
         int i, maxlen, len;
         char *new;
         maxlen = 2 * oldlen;
         if (maxlen < 128)
                 maxlen = 128;
         new = emalloc (maxlen);
         len = 0;
         i = oldlen;
         while (i--) {
                 if (len + 9 > maxlen)
                         new = erealloc (new, maxlen += 128);
                 if (38 == *old) {
                         memcpy (new + len, "&amp;", 5);
                         len += 5;
                 } else if (34 == *old && !(quote_style&ENT_NOQUOTES)) {
                         memcpy (new + len, "&quot;", 6);
                         len += 6;
                 } else if (39 == *old && (quote_style&ENT_QUOTES)) {
                         memcpy (new + len, "&#039;", 6);
                         len += 6;
                 } else if (60 == *old) {
                         memcpy (new + len, "&lt;", 4);
                         len += 4;
                 } else if (62 == *old) {
                         memcpy (new + len, "&gt;", 4);
                         len += 4;
                 } else if (128 == *old) { //3 righe by punkarruso...
                         memcpy (new + len, "&euro;", 6);
                         len += 6;
                 } else if (all && 160 <= *old) {
                         new [len++] = '&';
                         strcpy (new + len, EntTable [*old - 160]);
                         len += strlen (EntTable [*old - 160]);
                         new [len++] = ';';
                 } else {
                         new [len++] = *old;
		}
                 old++;
         }
         new [len] = '\0';
         *newlen = len;
         return new;
}
OCCHIO: ho preso e modificato i sorgenti della funzione nella versione 
4.0.6. non so se coindice con la 4.2.3 (dovrei bootstrappare in linux ma 
adesso non posso).
ciao
-- 
punkarruso

adesso non posso).
Dopo aver letto questo ho voglia solo di andare a casa mettermi a
letto e non alzarmi piששששששששששששששששששששש !! ;)
Matteo

 letto e non alzarmi piùùùùùùùùùùùùùùùùùùùùù !! ;)
why???
disclaimer:
il sorgente è vecchio perché fa parte di un lavoro ormai vecchiotto (2 
anni).
quello che dovrei seguire (nel tempo perso) è sul linux della mia 
macchina. su linux non ci sto lavorando per via di una commissione su 
sqlserver (ahimé).
sul mio windows ho la 4.2.1 ma è precompilata, allora non ci posso 
proprio fare niente!!!
mica mi metto a scompattare i sorgenti da cd apposta per consigliare a 
qualcuno come modificare il codice di PHP!! (o è per QUESTO che vuoi 
andare a casa??)
:-( vabbè, lo so, winzoz mi fa davveeeero maaale!!!!
:-(((
ciao
-- 
punkarruso

andare a casa??)
no no, è perché di fronte a cotanto sapere mi sento di proporzioni
hobbittiane! ;)
Vabbé, ars longa vita brevis!
Matteo