Salve,
qualcuno mi saprebbe spiegare dove sbaglio? Voglio infatti sostituire dei segni particolari di uno string con "_", Per es. in un Uploader in cui lo user carica un file, nel mio caso specifico si tratta di un sistema Mac OS X, si vuole evitare l'uso di segni particolari. Tipo un File del genere: myfile/../...jpg
Ora pur avendo tutto settato in UTF-8, DB, Editor ed header (charset), preg_replace() ma anche str_replace() continuano ad ignorare i segni particolari come pure le Umlaute, faccio un esempio:
Codice PHP:$str = "Müller"; // variabile viene inviata quale parametro in una funzione
Codice PHP:echo preg_replace('/\[^\pL]/u', '_', $str ); // Visualizza erroneamente: Müller formato UTF-8
Codice PHP:echo utf8_encode(preg_replace('/\[^\pL]/u', '_', utf8_decode($str) )); // Visualizza erroneamente: M?ller formato ASCII
Entrambi gli esempi non danno i risultati da me sperati. L'unico caso in cui preg_replace() funziona, è quando lo string lo inserisco manualmente hardcoded direttamente nella funzione:
Codice PHP:echo preg_replace('/\[^\pL]/u', '_', 'Müller' ); // Visualizza correttamente: M_ller
Devo forse settare qualcosa in php.ini? Questi sono i parametri settati:
codice HTML:Multibyte Support enabled Multibyte string engine libmbfl HTTP input encoding translation disabled libmbfl version 1.3.2 Multibyte (japanese) regex support enabled Multibyte regex (oniguruma) backtrack check On Multibyte regex (oniguruma) version 4.7.1 Directive Local Value Master Value mbstring.detect_order no value no value mbstring.encoding_translation Off Off mbstring.func_overload 0 0 mbstring.http_input pass pass mbstring.http_output pass pass mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml) mbstring.internal_encoding no value no value mbstring.language neutral neutral mbstring.strict_detection Off Off mbstring.substitute_character no value no value

Rispondi quotando
