Domanda

Nel database sono presenti parole che includono caratteri speciali (principalmente in spagnolo, come le tilde). Nel database tutto viene salvato e mostrato correttamente con PHPmyAdmin, ma quando ottengo i dati (usando PHP) e li visualizzo in un browser, ottengo un carattere strano, come un "? & Quot; con un quadrato ... Ho bisogno di una correzione generale, quindi non ho bisogno di scappare ogni personaggio ogni volta, e inoltre sarei in grado di inserire caratteri speciali spagnoli da un modulo PHP nel database ...

L'HTML è corretto:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Tutte le tabelle e le banche dati sono impostate su utf8_spanish

Il personaggio che ottengo: & # 65533;

Qualche suggerimento ???

Grazie !!!

È stato utile?

Soluzione 4

Modificato il set di caratteri HTML in ISO-8859-1 risolto il problema! Sciocco

Altri suggerimenti

Vorrei solo fornire ulteriori dettagli sulla soluzione proposta da vartec che è (a seconda dell'installazione di MySQL) la soluzione più corretta al tuo problema. Prima di tutto il problema relativo al set di caratteri / alla codifica in MySQL è un argomento piuttosto complesso che è ampiamente trattato nel manuale di MySQL Capitolo 9.1 " Supporto set di caratteri " . Nel tuo caso soprattutto 9.1.4. " Set di caratteri di connessione e regole di confronto " saranno i più pertinenti.

Per farla breve: MySQL deve sapere quale set di caratteri / codificare l'applicazione client (parlando dal database personale che è il tuo script PHP) si aspetta in quanto transcodificherà tutti i dati di stringa dal set di caratteri interno / codifica definito in a livello di server, database, tabella o colonna nel set di caratteri di connessione / codifica. Stai usando UTF-8 sul lato client, quindi devi dire a MySQL che usi UTF-8. Questo viene fatto dal comando MySQL SET NAMES 'utf8' che deve essere inviato come prima query all'apertura di una connessione. A seconda dell'installazione e della libreria client MySQL che usi nello script PHP, questo può essere fatto automaticamente su ogni connessione.

Se usi PDO è solo questione di impostare un parametro di configurazione

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

L'uso di mysqli per modificare il set di caratteri / la codifica del client è ancora più semplice:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Spero che ciò contribuirà a rendere il tutto più comprensibile.

Emetti SET NAMES 'utf8' subito dopo la connessione:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");

Chiedi a MySQL di tradurlo automaticamente

$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);

http://es.php.net/manual/ it / function.mysql-set-charset.php

MODIFICA: dal tuo commento ho raccolto, che questo è effettivamente codificato in latino1 quindi

mysql_set_charset('latin1_spanish_ci',$conn);

L'ho trovato da qualche parte e da allora lo uso nel suo complesso senza pensarci troppo.

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

santa merda .. questo mi stava facendo impazzire. stavo cercando di fare la stessa cosa. ho aggiunto un'intestazione HTML di codifica utf-8 .. mysqli_set_charset () mi ha salvato, ore dopo, ma sono contento di averlo funzionante ora

un'altra funzione da provare per codificare caratteri e accenti speciali è htmlentities ()

Puoi semplicemente fare:

$link = mysql_connect("host", "user", "password");
mysql_select_db("database", $link); mysql_query("SET NAMES 'utf8';", $link);

Attiva la codifica Unicode nel tuo HTML.

Quando ho a che fare con personaggi speciali mi prendo sempre cura di quanto segue:

  • I set di caratteri di database, tabella e campo sono tutti impostati su utf8_general_ * o utf8_unicode_ *
  • Mi assicuro che il mio editor salvi i file PHP con il giusto set di caratteri
  • Ho impostato default_charset in php.ini su UTF-8 o
  • Invio un Content-Type: text / html; charset = intestazione UTF-8
  • Il set di caratteri nel tag META è UTF-8 (questo viene sostituito dall'intestazione HTTP Content-Type)
  • Durante la connessione a MySQL, eseguo le seguenti query:
    • SET NAMES utf8
    • SET PERSONAGGIO SET utf8
    • SET COLLATION_CONNECTION = " utf8_general_ci " / " utf8_general_ci "

Sei sicuro di avere i dati UTF8 nel tuo database per cominciare?

La risposta che ha funzionato per me è quella che Stefan Gehrig ha pubblicato:

  

$ mysqli- > set_charset (" utf8 ");

Ho solo bisogno di aggiungere quella linea dopo aver definito la connessione e i miei problemi sono stati risolti! :)

(Sto pubblicando una risposta poiché non posso commentare ...).

la mia soluzione è: fare tutto quanto sopra offerto ma sto anche lavorando con notepad ++ e il file deve essere salvato in questo modo: vai alla codifica nella scheda del menu e salva il file - > encode in utf8

È interessante notare che questo codice non ha funzionato per me:

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'test');
mysqli_set_charset($link, "utf8");
printf("Current character set: %s\n", mysqli_character_set_name($link));
//shows latin1

Tuttavia, l'impostazione del set di caratteri all'interno di una condizione funziona:

if (!mysqli_set_charset($link, "utf8")) {
    printf("Error loading character set utf8: %s\n", mysqli_error($link));
    exit();
} else {
    printf("Current character set: %s\n", mysqli_character_set_name($link));
    //shows utf8
}

La mia configurazione:

$ rpm -qa|grep -E "php|maria"
mariadb-5.5.56-2.el7.x86_64
mariadb-server-5.5.56-2.el7.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
php-pdo-5.4.16-45.el7.x86_64
php-cli-5.4.16-45.el7.x86_64
php-5.4.16-45.el7.x86_64
php-common-5.4.16-45.el7.x86_64
php-mysql-5.4.16-45.el7.x86_64
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top