Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129

    intercettare un carattere

    Ciao a tutti,
    devo riuscire ad intercettare il carattere "§" se usato come primo carattere in un campo di un form.
    Utilizzando il seguente codice, fin qui nessun problema, ma la stranezza sorge nel comportamento della pagina che lo esegue e che quindi non mi intercetta correttamente il carattere.
    codice:
    (substr($Msg, 0, 1) == "$")
    Quando nella casella di testo digito il carattere in questione, la pagina viene ricaricata, i dati passati con il petodo POST ed il risultato del substr è un carattere incomprensibile che provo a ricopiare qui: �

    Ho immaginato che il problema fosse la codifica della pagina, ma - salvo errori - è corretta in utf-8:
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Cos'altro può essere che mi trasforma i caratteri durante l'invio di un form...? A furia di provare ho esaurito la fantasia...

    Grazie mille!

    Un saluto,
    Marco

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non basta specificare utf-8 come codifica, devi anche salvare i file in formato utf-8, o non serve a niente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    Se intendi le proprietà della pagina, non il formato, chiaramente l'ho già specificato e salvato.
    Se intendi altro, spiegati meglio...

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Hai provato utilizzando utf8_decode quando arriva la variabile?

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Originariamente inviato da galamarco
    Se intendi le proprietà della pagina, non il formato, chiaramente l'ho già specificato e salvato.
    Se intendi altro, spiegati meglio...
    Anche i file si possono salvare con diversi charset, devi salvarli con UTF8, prova ad aprire i tuoi file php con Notepad++, guarda in basso a destra e vedi in che formato sono stati salvati.
    Se non sono in UTF8:
    menu Formato -> Converti in UTF8 senza BOM
    ti risulteranno ora salvati come "ANSI as UTF-8"

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    Alhazred, il file è già in "ANSI as UTF-8"...
    Lo vedevo già da Dreamweaver, ma ho provato anche con Notepad++ e ne ho avuto ulteriore conferma.

    RoTeam, se passo il carattere in questione dentro alla funzione utf8_decode() mi restituisce un simpatico punto interrogativo: "?"
    Estratto così (perchè si tratta del primo carattere di una stringa ovviamente):
    codice:
    $a = utf8_decode(substr($Msg, 0, 1));
    echo "variabile: $a";

  7. #7
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    per favore, togli quel 'utf8_decode'...

    sembra che nessuno si ricordi che il carattere '§', in utf-8, è composto da due byte.. eppure utilizzi una funzione che multibyte non sà neanche cos'è..

    http://www.php.net/manual/en/function.mb-substr.php

    comunque, se posso consigliare un altro modo di procedere, questo è più adatto:
    Codice PHP:
    if (=== strpos($msg'§')) {
        
    //msg contiene § all'inizio della stringa


  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    Grazie mille .kurt, mi hai risolto il problema.
    Effettivamente controllando il carattere constrpos() lo intercetta.

    Una curiosità però, questo codice si trovava in una pagina che feci circa 7 anni fa ed all'epoca funzionava. E' quindi cambiata la dimensione del carattere § in questi anni?
    O è cambiato il funzionamento della funzione substr() con l'evoluzione di php?
    Come mai una volta lo intercettavo con substr($Msg, 0, 1) ed ora sono cambiate le cose?

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.