Il linguaggio di programmazione PHP
 

Problema Charset e mb_detect_encoding

NoS 10 Set 2017 10:06
Devo elaborare una stringa (non ho controllo a monte, devo prendere la
stringa e ridarla in HTML-ENTITIES).

Esempio di stringhe problematiche:
1 - Atà Trinità;
2- Atà Trinit� (il diamond è sempre una "à").


La 1, per avere il giusto output la devo trattare così:

$stringa_1 = mb_convert_encoding($stringa, "HTML-ENTITIES", "UTF-8");

Ma se tratto la 2 allo stesso modo il risultato in uscita è:

- At� Trinit�

Allora avevo pensato di creare un metodo per testare che tipo di
codifica mi entrava ed ho preprocessato la stringa con:

$res = mb_detect_encoding ($stringa, "auto");

Il problema è che il risultato per entrambe le stringhe è "UTF-8",
quindi non so come comportarmi.

Cosa sto sbagliando?

Grazie in anticipo
Leonardo Serni 13 Set 2017 21:24
On Sun, 10 Sep 2017 10:06:37 +0200, NoS <NoS@nospam.no> wrote:

>Allora avevo pensato di creare un metodo per testare che tipo di
>codifica mi entrava ed ho preprocessato la stringa con:

> $res = mb_detect_encoding ($stringa, "auto");

>Il problema è che il risultato per entrambe le stringhe è "UTF-8",
>quindi non so come comportarmi.

>Cosa sto sbagliando?

Tu poco. Ma prova:

mb_detect_encoding($stringa, 'UTF-8, ISO-8859-1', true);

per sicurezza.

Quello che io temo è che abbia sbagliato chi ti dà la stringa e ti stia
mandando robaccia in mixed charset, che ripulirla è da piangere sangue.

Il tuo esempio 2 mi fa temere questo.

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
NoS 14 Set 2017 08:54
Grazie per la risposta,
e si è un pasticcio.

Il 13/09/2017 21:24, Leonardo Serni ha scritto:
> mb_detect_encoding($stringa, 'UTF-8, ISO-8859-1', true);

Ad ogni modo, non avevo capito di poterla usare così questa funzione.
Grazie, così facendo identifico i charset (se tipo UTF-8 e ISO-8859-1) e
li posso trattare ognuno a suo modo, corretto?
Alessandro Pellizzari 14 Set 2017 13:51
On 14/09/2017 07:54, NoS wrote:

> Grazie per la risposta,
> e si è un pasticcio.
>
> Il 13/09/2017 21:24, Leonardo Serni ha scritto:
>> mb_detect_encoding($stringa, 'UTF-8, ISO-8859-1', true);
>
> Ad ogni modo, non avevo capito di poterla usare così questa funzione.
> Grazie, così facendo identifico i charset (se tipo UTF-8 e ISO-8859-1) e
> li posso trattare ognuno a suo modo, corretto?

Il secondo parametro è la lista dei charset da provare, in ordine. Il
primo che sembra somigliare a un risultato decente viene preso.

Ho perso una settimana a fare esperimenti, e ti posso dire per
esperienza che quella funzione non funziona (pun intended).

Non che altri metodi (anche con altri linguaggi e tool) funzionino
meglio, eh!

O sai esattamente il charset originale o non c'è modo di dargli una
lista che funzioni sempre. E se sai il charset non hai necessità di
farne il detect.

Bye.

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione PHP | Tutti i gruppi | it.comp.www.php | Notizie e discussioni php | Php Mobile | Servizio di consultazione news.