Database non estrae correttamente caratteri accettati

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Quando estraggo i dati da una tabella, le lettere accentate appaiono col classico punto di domanda.
Questa è la parte di codice: $link['pagina']
PHP:
function piu_visitate($n) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");  
   $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
  if ($pag_viste->num_rows > 0) {
    echo "<ol class=\"formol\"'piu_visitate'>";
    while ($link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {  
    echo "<div style=\"margin-bottom:-10px; font-size:10px; color:#c4c4c4;\">".$link["visite"]." volte</div>";  
    echo "<li><a class=\"visti\" href='".$link['url']."'>".$link['pagina']."</a></li>";
    }
  echo "</ol>";
  }
}
 

Allegati

  • Schermata 04-2456761 alle 04.36.46.png
    Schermata 04-2456761 alle 04.36.46.png
    14,5 KB · Visite: 328

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Quando estraggo i dati da una tabella, le lettere accentate appaiono col classico punto di domanda.
Questa è la parte di codice: $link['pagina']
PHP:
function piu_visitate($n) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");  
   $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
  if ($pag_viste->num_rows > 0) {
    echo "<ol class=\"formol\"'piu_visitate'>";
    while ($link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {  
    echo "<div style=\"margin-bottom:-10px; font-size:10px; color:#c4c4c4;\">".$link["visite"]." volte</div>";  
    echo "<li><a class=\"visti\" href='".$link['url']."'>".$link['pagina']."</a></li>";
    }
  echo "</ol>";
  }
}

Praticamente lo faccio entrare nel db in formato Octal, es: Cos\'\350 ALVEO? e nel db si stampa giusto: Cos'è ALVEO?, ma lo estrae col simbolo interrogativo.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
quando lo stampi a video mettici htmlspecialchars($link["visite"]);
Così vorrai dire
PHP:
".htmlspecialchars($link["pagina"])."
non stampa niente a video, tutto vuoto. La pagina è in utf8, il db in utf8_general_c. La tabella ed il campo sono in latin_swedish_ci
 
Ultima modifica:

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Database e tabelle sul db, per essere correttamente impostate per utf-8, devono avere il set su utf8mb4.
Detto questo, prova con un utf8_encode() al posto di htmlspecialchars().
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Database e tabelle sul db, per essere correttamente impostate per utf-8, devono avere il set su utf8mb4.
Detto questo, prova con un utf8_encode() al posto di htmlspecialchars().
Se metto come dici tu, scrive nel db il carattere strano, però a video stampa giusto. Praticamente è il contrario.

Perciò il problema è l'inserimento nel db. questo è il codice

PHP:
<?php
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($title) { 
if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
  $continua = false; 
  if (isset($_SERVER['HTTP_REFERER']) != "") {
  $from = parse_url($_SERVER['HTTP_REFERER']);
  $from = $from['host'];
}
else {
  $from = "";
} 
   $whitelist = array( 
/*Qui scrivi l'url del sito in modo che quando l'utente vi arriva DA TERZI, anche se digita con le pagine, il contatore non sale.
Se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale*/
"localhost" //Scrivi gli url senza http:// 
  ); 
  foreach ($whitelist as $sito) { 
    if ($from == $sito) $continua = true; 
  } 
  if ($continua) { 
    $mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");   
    $url = $_SERVER['PHP_SELF']; 
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'"); 
    $title=utf8_encode($link["pagina"]);
    if ($esiste->num_rows == 0) { 
      $mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)"); 
    } 
    else { 
      $old = $esiste->fetch_array(MYSQLI_ASSOC);   
      $visite = $old['visite'] + 1; 
      $mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'"); 
    } 
  } 
}   
 }
 
Ultima modifica:

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Pardon, l'utf8_encode usalo in fase di estrapolazione dei dati e non di inserimento.
Comunque non è strano: la tua tabella non è utf8, se ci entra dentro un dato multibyte lo leggerai "strano" ma una volta estratto e posto in un contesto dove il character set è quello appropriato (la tua pagina con encoding utf-8) torni a vederlo normale.

Dovresti convertire il collation della tabella sul tipo che ti ho suggerito e probabilmente questa operazione renderà inutile l'uso della funzione che ti ho suggerito.
 
Ultima modifica:

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Pardon, l'utf8_encode usalo in fase di estrapolazione dei dati e non di inserimento.
Comunque non è strano: la tua tabella non è utf8, se ci entra dentro un dato multibyte lo leggerai "strano" ma una volta estratto e posto in un contesto dove il character set è quello appropriato (la tua pagina con encoding utf-8) torni a vederlo normale.

Dovresti convertire il collation della tabella sul tipo che ti ho suggerito e probabilmente questa operazione renderà inutile l'uso della funzione che ti ho suggerito.
Ti ho appena risposto al post #8
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Il problema è che infili un dato utf-8 in una tabella non utf-8: è normale che non lo visualizzi bene.
Hai provato a modificare il collation della tabella ? (se lo fai, elimina la funzione utf8_encode che dovrebbe diventare superflua)
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Il problema è che infili un dato utf-8 in una tabella non utf-8: è normale che non lo visualizzi bene.
Hai provato a modificare il collation della tabella ? (se lo fai, elimina la funzione utf8_encode che dovrebbe diventare superflua)

Adesso è così:

Localhost: utf8_general_c
tabella e records: latin_swedish_c

Nel db scrive caratteri strani, es: Perché s'invecchia?

ma a video scrive giusto. Ho tolto il tuo codice utf8_encode()
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Questa è la codifica che ho ora, inserendo in SQL questo:
PHP:
 SHOW VARIABLES LIKE ‘character\_set\_%’;

mi da questo
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Sarebbe buona cosa impostare la codifica anche al client che si collega, questo lo puoi fare dall'oggetto mysqli:
PHP:
$mysqli->set_charset("utf8mb4");

Per il resto, forse i dati nella tabella sono rimasti memorizzati con la precedente codifica, prova con dei nuovi record.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Sarebbe buona cosa impostare la codifica anche al client che si collega, questo lo puoi fare dall'oggetto mysqli:
PHP:
$mysqli->set_charset("utf8mb4");

Per il resto, forse i dati nella tabella sono rimasti memorizzati con la precedente codifica, prova con dei nuovi record.

Dove lo metto questo? $mysqli->set_charset("utf8mb4");
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Ora è così, ma nel db stampa sempre caratteri strani, a video giusto. Non ho ancora inserito questo $mysqli->set_charset("utf8mb4");

 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Il pezzo di codice subito dopo aver aperto la connessione al db.
Quanto alla questione che nel db lo vedi strano, intendi che tramite il PHPMyAdmin lo vedi strano? Perché mi viene in mente che se il dato lo visualizzi giusto nella pagina significa che nel database il dato grezzo è salvato correttamente.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Il pezzo di codice subito dopo aver aperto la connessione al db.
Quanto alla questione che nel db lo vedi strano, intendi che tramite il PHPMyAdmin lo vedi strano? Perché mi viene in mente che se il dato lo visualizzi giusto nella pagina significa che nel database il dato grezzo è salvato correttamente.
Appunto, è questo il mistero: nel db lo salva con i caratteri accentati-strani, ma nel sito scrive giusto.
 
Discussioni simili
Autore Titolo Forum Risposte Data
I nome utente non esiste nel database PHP 1
MarcoGrazia Trovare record nel database partendo da id non sequenziali PHP 6
ICTSM [PHP] Collegamento a database non localhost PHP 3
Shyson [WordPress] In locale non importa database WordPress 6
M Database MYSQL non viene caricato offline MySQL 0
G Non scrive nel database PHP 1
T Non salva modifiche nel database da backend! Magento 0
Shyson Non inserisce datane Database PHP 1
V Database Postgres non abilitato geograficamente MySQL 0
filippino PHP e database... non MySQL!! PHP 2
C Non riesco più ad entrare su WordPress...."È richiesto l'aggiornamento del database" WordPress 0
P Aggiornamento database [era: Banale...per chi non è inesperta come me... :(] PHP 4
G form php connesso a database ma non inserisce dati PHP 5
E database non selezionato!? possibile! PHP 5
maxnegri Stampare la data prelevata dal database con lo slash e non con i due punti PHP 4
T Non invia i dati al database! PHP 20
asevenx problema con l'inserimento di un record nel database (caratteri non consentiti) PHP 11
M joomla: puntare ad un database oracle e non a mysql Joomla 6
E Database access con IIS7 non funziona Web Server 3
M connessione al database non riuscita MySQL 4
O Problemi con MAMP OS X non riesco a collegare dreamweaver al database PHP 0
T La registrazione non mi segna un nuovo utente sul database PHP 2
S Database - il form di ricerca non funziona Database 1
A database DBF (di cui non si capice il formato) e PHP PHP 3
I Salve,devo fare un database,ma non ci capisco MySQL 0
H Dimensioni database MSAccess non diminuiscono nonostante svuoto le tabelle Database 3
J Microsoft JET Database E+Errore non previsto del driver del database esterno (11265). Classic ASP 4
S non arrivano i dati al database Classic ASP 3
L Non riesco a vedere i database sul mio sito Classic ASP 8
M Invio dati database via email php PHP 0
MarcoGrazia Salvataggio HTML in database PHP 2
C prendere dei valori da Plugin e inserirli nel database joomla Joomla 0
F Stampare valori di un database PHP 14
Max 1 Accesso a database phpBB 2
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
D passare valori da database sql a php PHP 1
L form immagini per il database PHP 0
R [C#] Quali dipendenze occorrono su progetto "Setup" con Access Database? .NET Framework 1
D Visualizzazione pagina basata sul valore di un campo del database PHP 2
G Appicazione HTML per inserimento dai in Database Access Microsoft HTML e CSS 0
socket32 [XAMPP] Server in Locale condividere database MySQL 0
J Form inserimento dati in database Ajax 1
Z Problema database MySQL con XAMPP PHP 0
D Estrarre database con link esterno Database 10
T [A pagamento] convertire database Offerte e Richieste di Lavoro e/o Collaborazione 5
A Mostrare dati database per pagine PHP 2
G gdpr database Leggi, Normative e Fisco 0
Tommy03 App mobile+ sito web con lo stesso database Sviluppo app per Android 4
Alex_70 Delete foto in database e cartella PHP 72
L Upload di un'immagine all'interno di un database usando php PHP 6

Discussioni simili