problema con espressioni regolari e codici UTF-8

Ciao a tutti, ho cercato nel forum ma non ho visto nulla che possa risolvere il mio problema...

Io devo rimpiazzare tramite la preg_replace la stringa "giovedì" con la stringa "thursday" e fin qui nulla di complicato :) il problema si pone nel seguente caso:

$miastringa = preg_replace("/\bgiovedì\b/i", "thursday", "xxx giovedì yyy");

il risultato di questa funzione è: "xxx giovedì yyy".

mentre se io scrivo:

$miastringa = preg_replace("/giovedì/i", "thursday", "xxx giovedì yyy");

il risultato della funzione è: "xxx thursday yyy".

Prendendo atto che il problema posso ovviarlo tranquillamente con una espressione del tipo "/\s+giovedì\s+/i", vorrei capire perchè mai mettendo la parola che cerco all'interno dei caratteri \b la preg_replace fallice, e con lo stesso esempio fallisce anche la preg_match.

Il problema è sicuramente legato alla presenza del carattere regionale ì perchè in altre occasioni ho usato questa sintassi con successo ma erano tutti caratteri standard, inoltre ho provato anche a scrivere "/\bgioved\x{00EC}\b/iu" ma la preg_replace mi ritorna addirittura NULL.

Grazie a tutti per eventuali risposte.

Andrea

inviato 6 anni fa
Andy182
X 0 X

Credo dipenda il tutto dalla codifica dei caratteri.

Vedi questo commento:

http://www.php.net/manual/en/function.preg-replace.php#89471

Prova così:

$miastringa = preg_replace("/\bgiovedì(|\b)/i", "thursday", "xxx giovedì yyy");
risposto 6 anni fa
Mario Santagiuliana
X 0 X

Grazie per il consiglio, mi era sfuggito quel post quando ho guardato la pagina del manuale di PHP... non spiega però perchè gli dia fastidio il \b al termine della parola nel caso in cui sia presente un carattere UTF-8... sostanzialmente la soluzione che ha proposto lui se ho capito bene dice, cercami quella parola preceduta da un carattere delimitatore, ma che potrebbe non terminare con un altro carattere delimitatore...

Grazie comunque per la risposta :)

Buon lavoro.

risposto 6 anni fa
Andy182
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda