Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371

    Non riesco a convertire i caratteri accentati

    Buongiorno

    Ho questo problema: dovrei convertire i caratteri accentati nel loro equivalente normale (ad esempio è => e). Ho provato diverse soluzioni trovate su internet, ma non riesco a farle funzionare.

    Ad esempio, questo pezzo di codice

    codice:
    $transliterationTable = array('á'=>'a','Á'=>'A','à'=>'a','À'=>'A', (etc)
    str_replace(array_keys($transliterationTable), array_values($transliterationTable), $txt);
    
    non riesce a riconoscere nessuna lettera accentata.

    Quando vado a stampare l'array transliterationTable ottengo tutta una serie di lettere strane.

    Ho pensato fosse un problema del copia incolla, così ho creato un array con le lettere battute da tastiera (ovviamente limitato alle 6 che trovo sulla tastiera) ma il problema persiste.

    L'ultimo tentativo che ho fatto è stato scrivere questo pezzo di codice

    codice:
    
    
    codice:
    $ser[urlencode(' ')] = '_';
    $ser[urlencode('à')] = 'a';
    $ser[urlencode('è')] = 'e';
    $ser[urlencode('é')] = 'e';
    $ser[urlencode('ì')] = 'i';
    $ser[urlencode('ò')] = 'o';
    $ser[urlencode('ù')] = 'u';
    
    $url = urlencode($url);
    $url = str_replace(array_keys($ser), array_values($ser), $url);


    sperando che passando per urlencode non ci fossero problemi.

    Purtroppo lo stesso carattere (è) se scritto all'interno del codice è
    %C3%A8 mentre se lo mi arriva da un campo di testo mi viene trasformato in %E8

    Non so come mai si comporta in questo modo.
    A volte penso che, nel darci l'intelletto, la natura sia stata più sadica che generosa.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Assicurati di essere a posto con TUTTI i charset coinvolti nel processo, leggi il link che ho in firma sui caratteri strani.

  3. #3
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Ci ho messo un po' per capire come è la situazione.

    il dato mi arriva da un campo di testo in cui l'utente può digitare. Il campo di testo si trova in una pagina che ha come charset iso-8859-15. Il javascript lo invia attraverso una chiamata ajax a un programma php.

    prendendo come esempio il carattere ù, al programma in php arriva il codice %C3%B9, che è errato in quanto la codifica di ù secondo lo standard iso-8859-15 dovrebbe essere F9.

    anche il php va di iso-8859-15. Quando gli arriva la %C3%B9 non riesce a decodificarlo in ù (ho fatto la prova forzandogli l'invio di %F9, e, invece, funziona.

    quindi mi viene da dire che l'errore sta tra il javascript e il campo di testo in cui viene immesso il testo, ma non riesco a capire come uscirne.

    Inserisco il codice javascript magari aiuta

    codice:
    							title = encodeURI(document.getElementById('TitoloPag').value);
    
    
    							$.ajax({
    								url : 'GeneraUrl.php',
    								success :  function (data,stato)
    								{
    									document.getElementById('TitoloUrl').value=data;
    								},
    								error : function (richiesta,stato,errori)
    								{
    								}
    								,
    								
    								data : 
    								{
    									'titolo' : title
    								},
    								
    								type : 'POST'
    							});
    A volte penso che, nel darci l'intelletto, la natura sia stata più sadica che generosa.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Visto che i dati li mandi in post perché usi encodeURI() ?
    Prova senza, manda il titolo così com'è.

  5. #5
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Visto che i dati li mandi in post perché usi encodeURI() ?
    Prova senza, manda il titolo così com'è.
    era la prima prova che ho fatto. Il risultato non cambia: la ù viene trasformata sempre in %C3%B9

    Ho trovato una soluzione tampone: usando il comando deprecato escape() la codifica viene fatta correttamente in iso-8859 (temo iso-8859-1 perché il simbolo dell'euro lo interpreta male).

    Però è appunto una soluzione tampone: escape è deprecato quindi a breve non funzionerà più.

    EDIT:

    Ho provato a impostare il charset del forum a iso-8859-15 ma non va.

    A questo punto mi resta un'ultimo test: scrivo la funzione javascript in un tag javascript (adesso sta su un onclick) e gli setto il codice di caratteri da tag script.


    Edit 2:
    Non funziona neanche così.
    Ultima modifica di Reiuky; 27-07-2016 a 17:49
    A volte penso che, nel darci l'intelletto, la natura sia stata più sadica che generosa.

  6. #6
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    In conclusione...

    L'unico modo per venirne a capo è stato usare escape al posto di encodeURI. Ho cercato a lungo su internet, ma tutti quelli che avevano il mio problema hanno risolto sempre con escape.

    Grazie per i suggerimenti. Sono stati molto di aiuto.

    Penso che aprirò un tread simile su javascript, magari qualcuno ha una soluzione migliore.
    A volte penso che, nel darci l'intelletto, la natura sia stata più sadica che generosa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.