Visualizzazione risultati 1 fino 12 di 12

Discussione: Problema con i caratteri di escape

  1. #1
    Guest

    Predefinito [RISOLTO] Problema con i caratteri di escape

    Una pagina PHP riceve alcune stringhe da un modulo. Le riceve correttamente (e fin qui, tutto bene). Il problema è che l'utente che le ha scritte può aver aggiunto qualche apostrofo (ad esempio, per scrivere "l'uomo"). Allora PHP aggiunge i caratteri di escape, e la stringa diventa "l\'uomo". Quello che vorrei fare è togliere il backslash e, al posto dell'apice mettere la stringa "’", che è l'apostrofo. Ho scritto ua funzione, ma ho problemi. La funzione, che ho riportato qui sotto, "ottimizza" la stringa, sostituendo anche tutte le lettere accentate.

    Codice PHP:
    function perfeziona_testo ($testo){
    $testo = ereg_replace ("à", "à", $testo);
    $testo = ereg_replace ("è", "è", $testo);
    $testo = ereg_replace ("ì", "ì", $testo);
    $testo = ereg_replace ("ò", "ò", $testo);
    $testo = ereg_replace ("ù", "ù", $testo);
    $testo = ereg_replace ("À", "À", $testo);
    $testo = ereg_replace ("È", "È", $testo);
    $testo = ereg_replace ("Ì", "Ì", $testo);
    $testo = ereg_replace ("Ò", "Ò", $testo);
    $testo = ereg_replace ("Ù", "Ù", $testo);
    $testo = ereg_replace ("é", "é", $testo);
    $testo = ereg_replace ("É", "É", $testo);
    $testo = ereg_replace ("\n", "<br>", $testo);
    $testo = ereg_replace ("'", "&rsquo;", $testo);
    $testo = ereg_replace ("\\"."&rsquo;", "&rsquo;", $testo);
    return
    $testo;
    }
    Non riesco a togliere i backslash e ogni volta che ci provo dà errore oppure li tiene e non fa niente. Ho già fatto una ricerca sul forum e non ho trovato nulla. Qualcuno ha qualche idea/suggerimento?
    Ultima modifica di lilu1 : 25-09-2006 alle ore 14.34.08

  2. #2
    Guest

    Predefinito

    perchè non usi semplicemnete la funzione htmlentities()?

  3. #3
    Guest

    Predefinito

    Probabilmente perch'non ne avevo mai sentito parlare...
    Quindi io posso sostituire la funzione precedente con:
    Codice PHP:
    function perfeziona_testo ($testo){
    $testo = htmlentities($testo, ENT_QUOTES);
    return
    $testo;
    }
    (La funzione la lascerei, visto che può ancora venire utile e visto che ormai l'ho utilizzato in gran parte del mio sito).

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,266

    Predefinito

    altra cosa che puo' aiutarti è usare str_replace invece di ereg_ quando devi sostituire cose semplici, senza usare espressioni regolari. Gli slash inoltre possono essere tolti con... stripslashes()

  5. #5
    Guest

    Predefinito

    str_replace lo conosco. Solo che, nel casomi fosse mai capitato di dover usare espressioni regolari...
    strip_slashes nvece non lo conoscevo. Grazie.
    Io mi sono basato per le mie conoscenze su PHP, sulle guide di php.html.it, ma mi sto rendendo conto che non sono così complete.

  6. #6
    Guest

    Predefinito

    ti cosniglio di scaricare la documetnazione ufficiale(il link che ti ho postato prima) e fare sempre riferimetno a quella...le guide di html.it sono ottime per iniziare...ma forniscono solo nozioni basilari

  7. #7
    Guest

    Predefinito

    Ti informo comunque che ereg_replace è MOLTO lento, a differenza delle funzioni di PCRE. E comunque, per i piccoli replace, str_replace va più che bene. Per la ricerca di una stringa puoi usare strpos() o strstr() (php.net consiglia strpos, più veloce). Per perfezionare il testo basta fare htmlentities(stripslashes($testo), ENT_QUOTES); dove ENT_QUOTES è una costante usata da htmlentities() che indica alla funzione stessa di "tradurre" anche i quotes " e ' nel corrispettivo valore HTML.

  8. #8
    Guest

    Smile

    Citazione Originalmente inviato da dreamheaven
    Per perfezionare il testo basta fare htmlentities(stripslashes($testo), ENT_QUOTES);
    Non sarebbe più corretto invertire? Cioè, fare stripslashes(htmlentities($testo, ENT_QUOTES));
    Oppure non cambia proprio niente?
    Comunque, grazie mille, miei benefattori!

  9. #9
    Guest

    Predefinito

    non dovrebbe cambiare niente... ma lo stripslashes lo metti quando fai l'output vero?

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da demenziale
    lo stripslashes lo metti quando fai l'output vero?
    Lo stripslashes lo uso, in pratica, dopo aver cambiato gli apici e le virgolette in codici HTML, quando quindi non c'è più il rischio di avere casini. Allora salvo le stringhe nel database.

    Comunque ho un problema, credo di codifica. Se io immetto il carattere "è", il risultato di htmlentities è: "&Atilde;&2sup;" o qualcosa del genere, e così per tutti i caratteri accentati. Che devo fare? Io lavoro su Linux in locale, non so se è di qualche rilevanza.


    EDIT: Ecco, ho risolto tutto ripristinando la mia vecchia funzione, cambiando ereg_replace con str_replace e aggingendo in fondo la funzione stripslashes. Questo perché comunque a noi è utile scrivere il codice HTML, per esempio per fare un link, quindi è bene che i caratteri come <, > e & vengano conservati tali e quali. Inoltre così so bene quali sono i caratteri che vengono cambiati, e ho fatto un'altra funzione esattamente inversa, che fa tornare i caratteri precedenti, per la modifica dei contenuti. Ora funziona tutto bene.
    Grazie per l'aiuto.


    FunCool: Non fare UP, usa il tasto Edita.
    Ultima modifica di funcool : 26-09-2006 alle ore 09.46.48

  11. #11
    Guest

    Predefinito

    scusate se resuscito questo post non troppo vecchio...
    ho un problema (che tra le altre cose è lo stesso di lilu1):
    htmlentities mi traduce "ì " in
    ì
    Perchè? Lo stesso problema me lo fa a casa sul mio computer.
    Non vorrei dire una min... una cavolata ma non sarà il modo in
    cui ho creato le tabelle ? il phpmyadmin mio nuovo (e quello
    che c'è qui su AV) hanno creato i campi varchar in latin_swedish..
    qualcosa (io di certo non glielo ho detto :))
    Sarà quello?
    Che succede? htmlentities sta male?

    grazie

    <edit>non voglio fare pubblicità ma se andate sul mio sito (quello presente nel profilo) e andate alla sezione guestbook li potete leggere alcune risposte con questi errori. Tra le altre cose non è stata convertita neanche la è... in &egrave;</edit>
    Ultima modifica di demenziale : 03-10-2006 alle ore 14.39.23

  12. #12
    Guest

    Predefinito

    Accade che quella funzione non cambia è in &egrave; e così via, ma adotta, credo, un'altra codifica. La sintassi della funzione è:

    htmlentities ( string string [, int quote_style [, string charset]] )

    quindi, dopo aver dato la tua stringa in cui devono essere sostituiti i caratteri e la costante con cui definisci il comportamento di fronte ad apici e virgolette, puoi dire anche che charset utilizzare, ma le mie competenze terminano qua.

    Io ho rimediato ripristinando la mia funzione precedente, in cui sostituisco "a mano" i caratteri "pericolosi". Se vuoi te la passo, così non devi scriverla tutta.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •