PHP  »  Articoli  »  Programmazione Php 

PHP abbandona le funzioni ereg: le alternative

di: Claudio Garau     12 Marzo 2010

Funzioni PCRE e caratteri ASCII

Una difficoltà nel passaggio dalle funzioni POSIX alle PCRE potrebbe trovarsi nel modo in cui queste interpretano determinate tipologie di caratteri. Si consideri per esempio la funzione ereg_replace() che effettua sostituzioni sulla base di espressioni regolari e ha una sua alternativa nella funzione Perl compatibile preg_replace(); quando si passa un valore numerico a ereg_replace() ma si desidera che questo venga interpretato come il valore ASCII di un carattere (l'American Standard Code for Information Interchange che contiene i codici dei primi 128 caratteri numerati da "0" a "127"), per cui per esempio "13" deve corrispondere al ritorno a carrello ("\r") oppure "10" al passaggio ad una nuova linea ("\n"), la sintassi POSIX prevede una forma come la seguente:

// valore ASCII per l'inserimento di newline
$newline = 10;
// inserimento di una newline alla fine di una stringa
$sostituzione = ereg_replace('$', $newline, $stringa);

Diversamente, per fare in modo che il numero "10" venga utilizzato letteralmente nelle procedure di sostituzione all'interno di stringhe di testo, esso dovrà essere utilizzato sotto forma di valore stringa:

$valore = '10';

Questa problematica non si verifica invece quando si utilizza la funzione PCRE preg_replace(), essa infatti manipola il numero "10" interpretandolo esattamente per il suo valore letterale, cioè numerico e intero, senza prendere in considerazione il corrispondente valore ASCII; si presenta a questo punto il problema contrario (anche se decisamente meno frequente): come passare un valore ASCII alla funzione evitando che questa venga interpretata come numero? A questo scopo è necessario utilizzare innanzitutto un prefisso, "\x", poi si dovrà procedere con una conversione del numero nel suo corrispondente esadecimale; per cui, per esempio, il ritorno a carrello ha un corrispondente esadecimale "0D" mentre per la newline è "0A", il valore da passare a preg_replace sarà quindi "\x0d" nel primo caso e "\x0a" nel secondo.

In ogni modo, se lo si desidera sarà sempre possibile passare alla funzione una sequenza di escape nel suo formato letterale, quindi "\n" per la newline, "\t" per la tabulazione e così via.

Conclusioni

Con il rilascio della versione 5.3 di PHP le funzioni ereg per le espressioni regolari POSIX sono state dichiarate deprecate e verranno rimosse dalla release 6 del linguaggio; utilizzarle non è quindi più una buona pratica, chi desidera impiegare un'alternativa potrà farlo grazie alle funzioni PCRE, coloro che sono alle prime armi nello sviluppo di applicazioni in PHP potranno semplicemente imparare l'utilizzo delle PCRE ignorando le POSIX.

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti