• User Attivo

    Problemi con apostrofi

    So che il tema degli apostrofi è stato dibattuto in diverse discussioni ma rileggendole, non ho trovato quanto fa al caso mio, per cui ritorno sull'argomento.

    Ho un sito in cui gli utenti inseriscono dei testi (delle opere letterarie) in un form che passa il tutto ad una pagina PHP che salva i dati su un dabatase MySql.
    Le pagine sono codificate come UTF-8 e il database usa collation latin1_bin.

    Nella pagina che riceve i dati uso questa funzione per sistemare il testo:

    function correggi_testo($testo)
    {
    	$testo_temporaneo=$testo;
    	$testo_temporaneo=str_replace("?","'",$testo_temporaneo);
    	$testo_temporaneo=str_replace("?","'",$testo_temporaneo);
    	$testo_temporaneo=str_replace("`","'",$testo_temporaneo);
    	$testo_temporaneo=utf8_decode($testo_temporaneo);
    	$testo_temporaneo=mysql_escape_string($testo_temporaneo);
    	return $testo_temporaneo;
    }
    

    Le prime righe hanno la funzione di sostituire apostrofi speciali messi dai programmi di videoscrittura (come Word) con l'apostrofo dritto ' che altrimenti non sarebbero supportati da utf8_decode(). Questo nelle mie intenzioni, perchè in realtà la funzione non svolge il suo compito: se inserisco ad esempio il testo "guarda quell?albero" viene trasformato in "guarda quell?albero".

    Mi sapete dire dove sbaglio e come posso rimediare?
    Grazie mille


  • Moderatore

    Ciao 🙂
    Non puoi sostituirlo con l'entità ´ ? 🙂


  • User Attivo

    Sì, potrei, ma la cosa non cambia. Ciò che non riesco a fare è la sostituzione: str_replace non svolge il suo compito, con quei caratteri...


  • User Attivo

    vt


  • User Attivo

    Veramente in questo caso la funzione addslashes() non c'entra...
    Se rileggi bene il mio post, il problema non è con l'accento normale (quello presente sulla tastiera) ma con i vari accenti che programmi di videoscrittura usano.
    addslashes() già la uso, ma non si trattava di quello...


  • User Attivo

    hai ragione apsoft, non ho letto bene la tua domanda 😞
    per quello ho messo vt :bho:


  • User

    Ciao a tutti!!!

    hehe sembra un problema comune quello dell'apostrofo...

    la funzione str_replace accetta anche array

    quindi puoi fare anche una cosa così (poi puoi integrarla nella funzione ovviamente):

    $frase="Pippo è l'amico di Topolino";

    $old_chars = array ("'", """); // ECCETERA...
    $new_chars = array ("'", "&34;"); // ECCETERA...

    $nuova = str_replace ($old_chars, $new_chars, $frase);

    anche se ti consiglierei vivamente di prendere in considerazione il FCK EDITOR e sostituirlo ai campi di textarea (ti risolve da solo TUTTI i problemi dei caratteri...):

    fckeditor.net

    Max.