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

    Non si vede immagine con nome accentato

    Salve, non sto riuscendo a venire a capo di un problema che cerco di riassumere...
    Ho una pagina scheda.php che riceve in query string tre parametri:
    - Tabella (il nome della tabella del database dove cercare il contenuto)
    - Anno (il valore del campo anno della tabella di cui sopra)
    - Numero (il nome, letterale o numerico visto come stringa, del numero dell'anno in questione).

    Ho pertanto questo codice, dove ho tre if/else a seconda della Tabella (devo gestire da lì i titoli, generando $albofix che aggiunge degli zeri davanti a numeri di una o due cifre per portarle tutte a tre cifre):
    Codice PHP:
    $anno $_GET['Anno'];
    $albo $_GET['Numero'];
    $tabella $_GET['Tabella'];
    echo 
    "<img class='scheda img-fluid' src='copertine/";
    // if/else omessi funzionanti
    $copertina 'copertine/'.$albofix.'.jpg';
    $copertina str_replace("ù""u"$copertina);

    if (
    file_exists($copertina)) {
        echo 
    "$albofix".".jpg'"." "."alt='n° $albo ($anno)'><br />";
    } else {
        echo 
    "nd.jpg'><br />";

    In sostanza ho una immagine che ha nome "Bracciopiù.jpg", che però non riesco a visualizzare, sebbene l'echo di test fatto su $copertina visualizzi il path corretto.
    Ho appositamente caricato con FileZilla lo stesso file coi nomi Bracciopiu.jpg e Bracciopiu'.jpg, modificando opportunamente lo str_replace() ma vedo esclusivamente nd.jpg (immagine per copertina non disponibile) oppure l'icona dell'immagine mancante (errore 404) nonostante echo $copertina mostri un path esistente!
    Come posso risolvere?

  2. #2
    Non sarebbe molto più semplice salvare i file usando l'ID del record oppure un hash dei campi chiave?

    Ad ogni modo, è probabilmente un problema di encoding dei dati salvati nel DB.

  3. #3
    In realtà i file delle copertine non hanno un campo nelle tabelle poiché il loro nome coincide col titolo dell'albo/volume, e tutto funziona tranne per questo titolo accentato.
    La codifica nelle mie pagine PHP è utf-8, mentre nel DB è utf8_general_ci, che non mi dà problemi neppure nell'acquisire i record di descrizioni con parole accentate.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Forza UTF-8 per i nomi di file su FileZilla https://hosting.xyz/wiki/hosting/ftp...lezilla/utf-8/ e tutto in UTF-8 senza BOM con header('Content-Type: test/html charset=UTF-8'); e anche funzioni come htmlspecialchars o similari e anche https://forum.html.it/forum/showthre...readid=2901187 puoi mostrare la stringa convertendo in codifica percentuale con un urlencode(); che è anche il valore usato dalle richieste GET/POST. Mentre php usa internamente urldecode() per $_GET/$_POST e simili.
    Tramite il valore esadecimale puoi capire se quei byte è una sequenza UTF-8.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Errore di battitura sostituisci con
    Codice PHP:
    header('Content-Type: text/html; charset=utf-8'); 

  6. #6
    Grazie delle dritte.
    A memoria direi che una parte delle indicazioni le avevo seguite a suo tempo, infatti l'header è già impostato come hai scritto, e il link alla discussione sui caratteri strani fu la base di costruzione della mia pagina. Devo controllare tutto il resto.

    Quella ù viene vista nel valore dell'attributo src come %C3%B9, sebbene l'echo del puro testo me la stampi correttamente.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Ciao non preoccuparti un carattere ù in UTF-8 è di due bytes esadecimale C3 B9.
    Forse l'errore è l'impostazione del sistema php, cioè non trova la ù la funzione str_replace, prova con
    Codice PHP:
    $test str_replacechr(195) . chr(185), 'u''pi' urldecode'%C3%B9' ) );
    var_dump($test); //Output piu 
    oppure imposta
    Codice PHP:
    $test2 setlocaleLC_ALL'de_DE.UTF8' );
    //codice
    var_dump($test2); 
    temporaneamente tedesco

  8. #8
    A naso ....
    codice:
    echo "$albofix".".jpg'"
    però il replace tu lo fai in $copertina, quindi $albofix conterrà l'accento...
    Secondo me viene molto meglio così:
    codice:
    // if/else omessi funzionanti
    $copertina = 'copertine/{$albofix}.jpg';
    $copertina = str_replace("ù", "u", $copertina);
    $img = "<img class=\"scheda img-fluid\" src=";
    if (file_exists($copertina)) {
        $img .= "\"{$copertina}\" alt=\"n° {$albo} ({$anno})\">";
    } else {
        $img .= "\"nd.jpg\">";
    }
    echo $img;
    Tralasciamo il fatto che, sempre secondo me, andrebbe fatto totalmente diverso ma sono "gusti" personali
    [code]

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.