Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    String replace con carattere °

    Salve a tutti,
    qualcuno mi sa spiegare come mai con un codice del genere:
    Codice PHP:
    <form action="test.php" method="post"><input type="text" name="ciao"><input type="submit" value="invia"></form>
    <? if($_POST['ciao']) { $ciao str_replace("°","GIOVANNI",$_POST['ciao']);echo $ciao; } ?>
    anche scrivendo curva a 90° il carattere °(grado) non viene sostituito con GIOVANNI?
    Ultima modifica di theboss280489; 10-01-2015 a 13:33

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova cosi e dimmi si funziona.

    Codice PHP:
    $ciao "curva a 90°";
    $ciao str_replace("°","GIOVANNI",$ciao);
    echo 
    $ciao
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    No, ho risolto con
    Codice PHP:
    $ciao str_replace(chr(176),"GIOVANNI",$ciao); 
    ma volevo capire come mai non funziona con il metodo standard ossia inserendo il simbolo del grado tra parentesi

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Non ha funzionato perché il sorgente è stato salvato con una codifica differente dalla stringa "$ciao". Quando tu scrivi
    codice:
     str_replace("°","GIOVANNI",$ciao)
    Sia "°" che $ciao devono condividere la stessa codifica. In caso contrario il carattere (o meglio, il point code) "°" nella codifica A (utilizzata per salvare il sorgente del file) potrebbe avere un valore differente nella codifica B di $ciao (o non esiste proprio), il risultato di questa operazione è una string a corrotta.
    Per chiarirti questa cosa, immagina di salvare il sorgente in utf-8. Se la mia stringa è "°", allora avrà al suo interno due byte, "\xc2\xb0". Se invece lo salvo in ascii esteso, allora quello stesso carattere si codifica utilizzando uno e un solo byte. str_replace si limita a sostituire byte, non caratteri. L'errore è assumere il contrario.
    Ultima modifica di .Kurt; 10-01-2015 a 18:05

  5. #5
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Non ha funzionato perché il sorgente è stato salvato con una codifica differente dalla stringa "$ciao". Quando tu scrivi
    codice:
     str_replace("°","GIOVANNI",$ciao)
    Sia "°" che $ciao devono condividere la stessa codifica. In caso contrario il carattere (o meglio, il point code) "°" nella codifica A (utilizzata per salvare il sorgente del file) potrebbe avere un valore differente nella codifica B di $ciao (o non esiste proprio), il risultato di questa operazione è una string a corrotta.
    Per chiarirti questa cosa, immagina di salvare il sorgente in utf-8. Se la mia stringa è "°", allora avrà al suo interno due byte, "\xc2\xb0". Se invece lo salvo in ascii esteso, allora quello stesso carattere si codifica utilizzando uno e un solo byte. str_replace si limita a sostituire byte, non caratteri. L'errore è assumere il contrario.
    Chiarissimo, Grazie

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.