Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Problemi con apostrofi

  1. #1

    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:
    codice:
    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

  2. #2
    devi usare htmlspecialchars
    quarda http://www.php.net/htmlspecialchars

    devi cambiare praticamente il ' a '''

  3. #3
    Ehm, forse non mi sono spiegato bene.

    Il mio problema non è la gestione dell'accento dritto ' . Con quello funziona già tutto perfettamente. Il problema sono gli altri tipi di accenti, come ’ o ‘ o ancora `.
    Sono questi che non riesco a trasformare nell'accento normale, nonostante tenti di farlo con str_replace()

    Non credo che htmlspecialchars() mi sia d'aiuto in questo caso...

  4. #4
    Nessun'altro mi può aiutare?

  5. #5
    anche il sorgente php dove hai quel codice deve essere in utf-8.

    Altrimenti tu gli stai dicendo di sostituire il carattere ’ espresso in iso-8859-1 (che non si sa cosa sia in utf-8) con il carattere ' sempre espresso in iso-8859-1 (ma questo coincide tra i due charset, ti va di culo ).

    l'alternativa, inutilmente pesante, sarebbe qualcosa tipo
    $testo_temporaneo=str_replace(utf8_encode("’"),"'" , $testo_temporaneo);

    Salva il php come utf-8, riscrivi i caratteri che eventualmente si sono sputtanati nella conversione, e dovrebbe funzionare.

    Ah, per sostituire tante stringhe, puoi passare degli array di stringhe alla str_replace, chiamandola una sola volta.

    P.S. Ovviamente nel passaggio a iso-8859-1 metti in conto che avrai comunque i ? per tutti quei caratteri di utf-8 che iso-88ectetc non può rappresentare.

  6. #6
    Grazie per la risposta.
    Il codice che mi suggerisci
    codice:
    $testo_temporaneo=str_replace(utf8_encode("’"),"'", $testo_temporaneo);
    non mi sembra funzionare. Nel caso di questo esempio, l'accento ’ non viene sostituito. Da quanto ho avuto modo di capire io il problema è proprio l'uso dei vari accenti con le funzioni utf8_encode e utf8_decode.

    Salva il php come utf-8, riscrivi i caratteri che eventualmente si sono sputtanati nella conversione, e dovrebbe funzionare.
    mi puoi spiegare cosa intendi per "salvare il php come utf-8" ? Immagino tu intenda usare la codifica UTF-8 anche nella pagina che salva esegue la funzione di conversione degli accenti. Tutte le pagine del sito usano la codifica UTF-8, ma il problema permane...

  7. #7
    Intendo proprio lo script php che svolge quelle operazioni.
    Ho appena provato questo codice:

    Codice PHP:
    header("Content-type:text/html;charset=iso-8859-1");
    $testo_temporaneo="guarda quell’albero";
    $testo_temporaneo=str_replace("’","'",$testo_temporaneo);
    echo 
    utf8_decode($testo_temporaneo); 
    dentro un file php codificato in utf-8 e funziona perfettamente, la stringa in output è
    guarda quell'albero, come previsto

  8. #8
    Sì, così funziona in effetti.
    Però in questo modo impongo la codifica iso-8859-1. Con questa codifica sapevo che funzionava, il problema è che vorrei codificare tutto in utf-8 e con questa non funziona...

  9. #9
    Originariamente inviato da apusoft
    Sì, così funziona in effetti.
    Però in questo modo impongo la codifica iso-8859-1. Con questa codifica sapevo che funzionava, il problema è che vorrei codificare tutto in utf-8 e con questa non funziona...
    mannò, la codifica iso l'ho mandata in output perché nel mio esempio il testo (appena convertito in iso) lo voglio stampare a video, invece che salvare sul database. Il file è codificato in utf-8, puoi tranquillamente mandare in output utf-8 e salvare invece sul database la stringa iso.

  10. #10
    Scusami, non ho capito molto di questo ultimo post. Se io mando l'intestazione
    codice:
    header("Content-type:text/html;charset=utf-8");
    il problema ritorna.

    puoi tranquillamente mandare in output utf-8 e salvare invece sul database la stringa iso.
    Mi potresti fare un esempio?
    Grazie per la pazienza e la disponibilità...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.