Caratteri speciali e parole accentate

minatore

Utente Attivo
25 Set 2007
410
0
0

Ciao ragazzi,
stamattina mi è capitata una cosa strana, ho fatto un rudimentale form per essere a conoscenza di ciò che facevano 4 righe di codice, mi siego
guardando sul web mi sono accorto che sono molte le domande sui caratteri speciali e sulle parole accentate e come gestirle in php.
questa è la pagina del form
HTML:
<?php /* Created on: 27/08/2012 */ ?>
<html>
<head>
<meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'> 
</head> 
<body>
<form id="form1" name="form1" method="post" action="esito.php">
<textarea name="messaggio" id="messaggio" cols="45" rows="5"></textarea><br>
<input type="submit" name="submit" id="submit" value="Invia Messaggio" />
</form> 
</body>
</html>
ho notato che senza questa riga di codice
<meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'>
le parole accentate non vengono inserite nel db
questa è la pagina esito.php
PHP:
<?php /* Created on: 27/08/2012 */ ?>
<html>
<body>
<?php
require 'connessione/Config.php'; 
require 'connessione/Connect.php';  
$messaggio=trim($_POST['messaggio']);
if(get_magic_quotes_gpc())
	{
		$messaggio=stripslashes($messaggio); 
	} 
$messaggio=htmlspecialchars($messaggio);	  
$messaggio=mysql_real_escape_string($messaggio);

$titolo="prova";
$query=mysql_query("INSERT INTO comunicazioni(titolo_comunicazione,descr_comunicazione) 				   VALUES('$titolo','$messaggio')"); 
?>
</body>
</html>
supponendo che vorrei scrivere nel db queste righe
lettere accentate à è ì ò ù
gli slash //\\"//'7'
caratteri speciali <> <amici>
con il codice sopra ottengo
lettere accentate Ã* è ì ò ù
gli slash //\\&quot;//'7'
caratteri speciali &lt;&gt; &lt;amici&gt;
per stamparle a video ed avere una corretta traduzione devo fare una cosa del genere
PHP:
echo htmlspecialchars_decode(htmlentities($Stringa]));
mentre se togliessi questa riga
PHP:
$messaggio=htmlspecialchars($messaggio);
nel db avrei
lettere accentate Ã* è ì ò ù
gli slash //\\"//'7'
caratteri speciali <> <amici>
ed in php dovrei scrivere
PHP:
echo htmlentities($stringa);
Adesso vorrei un vostro parere in merito, da esperti mi consigliate la prima, la seconda oppure entrambe possono andare bene, il risultato alla fine è uguale, ma cambia qualcosa in sicurezza?
Ciao da minatore
 
La seconda è la soluzione più elegante e quella adottata nella maggior parte delle applicazioni: assicurati che il charset sia sempre definito e usa htmlentities per convertire le lettere accentate nelle rispettive entità HTML. Quando poi le visualizzi, usa htmlentities_decode.
 
Ciao Alessandro, grazie per la risposta, intanto ho usato
PHP:
$pippo=$ris_comunicazione['descr_comunicazione'];
 echo nl2br(htmlentities_decode($pippo));
ma da errore
Codice:
Fatal error: Call to undefined function htmlentities_decode()
Ciao
 
Ciao Alessandro, grazie per la risposta, intanto ho usato
PHP:
$pippo=$ris_comunicazione['descr_comunicazione'];
 echo nl2br(htmlentities_decode($pippo));
ma da errore
Codice:
Fatal error: Call to undefined function htmlentities_decode()
Ciao

Ciao, forse ti riferivi a
PHP:
html_entity_decode
Ciao da minatore
 

Discussioni simili