[php-mysql] Caratteri speciali e accentati

toni93

Utente Attivo
12 Nov 2009
38
0
0
ciao a tutti, ho un problema, uso mysql con tabelle con collation settato a utf8_roman_ci e nell'inserire caratteri accentati o apostrofi e ecc.. , non ho errori nelle query infatti già uso mysql_real_escape_string() ,però nel database i caratteri particolari diventano roba illeggibile.
sono molto poco informato sulle codifiche e spero mi potete indicare un modo per risolvere il mio problema.

grazie.
 
Ultima modifica:
così tante visite e nessuna risposta... tutto sommato non credo sia poi troppo difficile...:confused:
 
Ciao!
Potresti provare nella pagina php a fare un replace dei caratteri accentati e convertirli... Per esempio:

Codice:
<?php
.........
$stringa = str_replace ("à", "&agrave;", $stringa);
$stringa = str_replace ("è", "&egrave;", $stringa);
$stringa = str_replace ("ì", "&igrave;", $stringa);
$stringa = str_replace ("ò", "&ograve;", $stringa);
$stringa = str_replace ("ù", "&ugrave;", $stringa);
.........
?>

no? :)
 
Ciao!
Potresti provare nella pagina php a fare un replace dei caratteri accentati e convertirli... Per esempio:

Codice:
<?php
.........
$stringa = str_replace ("à", "&agrave;", $stringa);
$stringa = str_replace ("è", "&egrave;", $stringa);
$stringa = str_replace ("ì", "&igrave;", $stringa);
$stringa = str_replace ("ò", "&ograve;", $stringa);
$stringa = str_replace ("ù", "&ugrave;", $stringa);
.........
?>

no? :)

sarebbe corretto ma volevo evitare una cosa del genere e preverirei usare una funzione php già esistente (ammesso che esista) per essere sicuro che risponda bene anche in casi particolari e con più tipi di caratteri possibili.
 
bè ma, correggimi se sbaglio, se esistesse una funzione del genere sarebbe comunque composta da replace sulla stringa...

E a questo punto non puoi scrivere tu la tua funzione ed utilizzare quella? :)

comunque ecco dei piccoli consigli:

1. Crea il db con charset, collation utf8
2. Crea i tuoi file in utf8 (per alcuni editor non c'è questa opzione, ma è importante, perchè se scrivi una lettera accentata nei tuoi file html usando l'iso come codifica stai certo che vedrai i quadratini).
3. Nei file php inserisci questo all'inizio :
Codice:
header('Content-type: text/html;charset=utf-8');


Per il debug:

1. E' importante sapere che i browser hanno il menu visualizza->"codifica", che in genere è settato su riconoscimento automatico, ma che usato a dovere ti permette di capire in quale charset stai vedendo la pagina e se il risultato è quello che ti aspetti.
2. E altrettanto importante sapere che phpmyadmin non sempre dice la verità, perchè alla fine è un sito che soffre anche lui del problema della codifica, io per essere certo di quello che sto guardando controllo sempre la codifica, e 9 volte su 10 se la cambi vedrai i caratteri corretti.
Ricorda, phpmyadmin è un livello intermedio tra te e il db, è un ottimo strumento, ma non è il db, non dare per scontato che quello che ti mostra è il vero contenuto del db.
 
grazie, nel mio file ho risolto con l'istruzione "header('Content-type: text/html;charset=utf-8');".
se ho capito bene questa istruzione dice al browser di impostare la codifica a utf8, giusto??
in phpmyadmin vedo comunque i caratteri strani anche se imposto manualmente dal browser la utf8, perche?
 
ma nel db vedi dei caratteri senza senso o delle entità HTML?
 
Io ti suggerirei di usare una funzione che ho scritto tempo fa:
PHP:
function my_htmlentities($var, $qs = ENT_COMPAT, $charset = 'ISO-8859-1')
{
	$search = array('ì', 'è', 'é', 'ò', 'à', 'ù');
	$replace = array('&igrave;', '&egrave;', '&eacute;', '&ograve;', '&agrave;', '&ugrave;');
	
	$var = str_replace($search, $replace, $var);
	$var = htmlentities($var, $qs, $charset, false);
	
	return $var;
}
 
hai provato a forzare l'UTF8 nel db?
PHP:
$db = mysql_connect('localhost', 'user', 'password') or die(mysql_error());
 mysql_set_charset('utf8', $db);
 
hai provato a forzare l'UTF8 nel db?
PHP:
$db = mysql_connect('localhost', 'user', 'password') or die(mysql_error());
 mysql_set_charset('utf8', $db);

ho appena provato ma sembra che non cambi nulla, credo sia già utf8.

ho provato a fare l'input nel db con htmlentities, in questo modo con phpmyadmin vedo le entità html ma nella mia pagina vedo i caratteri strani nonostante facendo ctrl+u vedo le entità. non ci sto capendo più niente:confused::confused:
 

Discussioni simili