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