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

    lettere accentate?

    Ciao,

    premetto che non so nulla di Perl, tuttavia sono riuscito a creare un
    uploader.

    Form.html passa alcuni parametri testuali ed un file ad Upload.pl il
    quale effettua l'upload e chiama Redirect.php.

    Bene, in perl il file lo prendo e lo salvo senza problemi. Chiamare
    Redirect.php e passargli i campi del orimo form non funziona.

    Il problema sta nelle lettere accentate. Ho provato di tutto: encode
    ("iso-8859-1"), encode_entities( ... ), uri_escape(…),
    CGI::escapeHTML... ma nulla.

    In questa immagine trovate una tabella con il risultato di ciascuna di
    quelle funzioni:

    http://www.orchestralparts.com/special_char.jpg

    Nella prima riga c'è la lettera digitata dall'utente nel form, 2 e
    3rza colonna è il valore che spero poter generare in Perl, le altre
    sono il risultato delle varie funzioni.

    Possibile che non riesca ad ottenere un à con nessuna di queste
    funzioni?

    thx

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non ho capito completamente. Provo a riscrivere i passi come li vedo io.

    1. In un form l'utente scrive un testo contenente una lettera accentata.
    2. Il programma Perl che legge il form vede il testo e ci vede dentro un carattere non ASCII (>127)
    3. In base alla codifica dei caratteri da parte del browser dell'utente (!), il Perl deve convertire tale carattere nell'entita` corrispondente.
    4. Il testo con tale carattere convertito viene ritrasmesso al browser in una pagina Web (questo e` quanto da me interpretato).

    Anzitutto devi fare attenzione al charset del form, del browser e del Perl (i piu` comuni sono piu` di uno: almeno vedi ISO8851 e Windows).
    Non e` detto che il charset del form (impostato dal browser e su cui non e` detto che puoi intervenire) sia lo stesso del browser (che puoi definire tramite il charset nella <head>).
    Ed e` anche possibile che il form stesso, prima di inviare un carattere non-ASCII lo converta in qualcos'altro in modo automatico o quasi.

    Per prima cosa dovresti quindi vedere cosa ti arriva (da quel particolare browser) e farti la tabella di conversione (la conversione si fa in un'unica riga Perl mediante RE -- 1 RE per ogni carattere da convertire)

    E la cosa piu` semplice che vedo io e` che qualsiasi carattere lo trasformi nell'entita` corrispondente, in modo da farla poi digerire in modo uguale da tutti i browser.


    PS: mi rendo conto che non ti ho risposto direttamente, ma spero di averti dato una traccia che puoi sviluppare.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Grazie,

    girando qua e la ho capito che ho bisogno di una conversione intermedia.

    Ora mi metto al lavoro e se funziona magari posto il codice della conversione. Ho visto infatti tante domande su vari forum ma nessuna risposta funzionante (almeno per me).

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    1

    php forms e lettere accentate

    Avevo lo stesso problema. Ora l'ho risolto usando la funzione utf8_encode. Esempio di consultazione via POST di un flat-database. Il segreto è essere sicuri che il database sia codificato UTF8. E' bene che nell'HEAD del file che ospita il codice php, ci sia la seguente riga
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    Il database in questo esempio è un semplice file di testo, per esempio creare un file .txt con parole con e senza accento:
    ...
    caffè
    casa
    oltrepò
    ecc..

    salvarlo come 'db.txt'

    programma:
    <?php
    if( isset($_POST['submit']) && trim($_POST['cerca']!="") )
    $cerca=htmlspecialchars(strtolower($_POST['cerca'])); // per la sicurezza
    $riga=file('db.txt');
    foreach($riga as $rd) {
    $found=strpos(utf8_encode(strtolower($rd)),$cerca) ;
    if(!($found===FALSE)){
    echo utf8_encode($rd) . "
    ";
    }
    }
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
    cerca: <input type='text' name='cerca'>
    <input type='submit' name='submit' value='invia'>
    </form>

    introducendo nell'input parole accentate, se queste sono presenti nel flat database, verranno stampate correttamente.
    Buon lavoro

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.