caratteri speciali, accenti e a capo

  • Creatore Discussione Creatore Discussione asevenx
  • Data di inizio Data di inizio

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Salve, ho un db gestito in mysql e con php ho creato delle bacheche dove l'utente può lasciare messaggi e commentare. Tuttavia, appaiono i caratteri del tipo è, ù, ò al posto dei caratteri accentati à ù ò ecc. Come faccio a visualizzarli correttamente? Devo dire che nella mia homepage ho creato 3 bacheche collegati a 3 db e in ogni di questa form con possibilità di lasciare commenti collegati ad altrettanti db, quindi ho 6 db. Ricordo che aggiungendo delle funzioni in php dopo la creazione del db tutto si visualizzava bene, ma avendone 6 la cosa si complica (almeno per me). Io usavo questa funzione (tralaltro consigliato da voi se non sbaglio):
PHP:
//funzione per visualizzare gli accenti
function my_htmlspecialchars($var)
{
    $search = array('è', 'é', 'ì', 'ù', 'ò', 'à');
    $replace = array('è', 'é', 'ì', 'ò', 'à');
    $var = str_replace($var, $search, $replace);
    
    return $var;
}
ma ora non so come inserirla (o se è corretta). La struttura delle varie bacheche è cosi:
PHP:
<?php
//dati database
$host = "localhost";
$username = "xxx";
$password = "";
$database = "xxx";
$tabella_1 = "forum_1";
$tabella_1_comm = "forum_1_commenti";

//connessione e invio al DB
$connessione = mysql_connect($host, $username, $password) or die("Connessione DB fallita");
mysql_select_db($database, $connessione) or die("Selezione DB fallita");

//visualizza tutti i record nel DB
$query_sito = "SELECT * FROM $tabella_1 Order By idfan DESC LIMIT 20";
$result_sito = mysql_query($query_sito, $connessione) or die('Errore caricamento...');

//ciclo while per visualizzare i dati estratti dal database
while($resrow_sito = mysql_fetch_row($result_sito))
{
$id_sito = $resrow_sito[0];
$nome_sito = addslashes($resrow_sito[1]);
$titolo_sito = addslashes($resrow_sito[2]);
$commento_sito = ($resrow_sito[3]);
$data_sito = addslashes($resrow_sito[4]);

//Stampo il risultato
echo "
<div class='divcommenti' align='center'>
	<table class='tablecommenti' cellpadding=0 cellspacing=0>
		<tr>
			<td class='idx'>$id_sito</td>
			<td class='col1comm' >$titolo_sito</td>
			<td class='col5comm'>$data_sito</td>
		</tr>
		<tr>
			<td class='idx2'>&nbsp </td>
			<td class='col3comm' colspan=2>
				<font class='col2comm'>$nome_sito:</font> $commento_sito</td>
		</tr>";
		
//seleziono i commenti dal DB
$query_sito_comm = "SELECT * FROM $tabella_1_comm Order By idfan_c DESC";
$result_sito_comm = mysql_query($query_sito_comm, $connessione) or die('Errore caricamento...');

//ciclo while per visualizzare i dati estratti dal database
while($resrow_sito_comm = mysql_fetch_row($result_sito_comm))
{
$id_sito_comm = $resrow_sito_comm[0];
$nome_sito_comm = addslashes($resrow_sito_comm[1]);
$commento_sito_comm = ($resrow_sito_comm[2]);
$data_sito_comm = addslashes($resrow_sito_comm[3]);
$id_sito_ris = addslashes($resrow_sito_comm[4]);

//riconoscimento dei commenti di un post tramite id
if ($id_sito_ris == $id_sito) {

//Stampo il risultato (verificato OK)
echo"	
		<tr>
			<td class='idx2'>&nbsp </td>
			<td class='col8comm' colspan=2><br>RE: <font class='col7comm'>$nome_sito_comm:</font> $commento_sito_comm</td>
		</tr>
		<tr>
			<td class='idx2'>&nbsp </td>
			<td class='col6comm' colspan=2>$data_sito_comm</td>
		</tr>	";
	}
}

echo"
		<tr>
			<td class='idx2'>&nbsp </td>
			<td colspan='2' class='col4comm'>
			
					<div class='outer-container'>
						<div class='button-container'><span>Inserisci un commento</span></div>
						<div class='closed'>
						
						<form method='post' action='forum/cartella/commenti_ins2.php'>			
							<table>
								<tr>
									<td><div style='font-size:12px'>Nome:</div></td>
									<td>
										<input class='commentabox2' type='text' name='nome_sito_c'>
									</td>
									<td>
										<input class='commentabox3' type='text' name='data_sito_c' readonly='readonly' 
											value='"; echo date("d/m/y"),' ',ora,' ',date("H:i"); echo"'>
									</td>
									<td>
										<input class='commentabox4' type='text' name='id_sito' readonly='readonly' value='$id_sito'>
									</td>
								</tr>
								<tr>
									<td colspan=4>
										<textarea class='commentabox1' name='commento_sito_c' wrap='hard'></textarea>
									</td>
								</tr>
								<tr>
									<td colspan=4>
										<input type='submit'value='Invia commento' name='action'>
										<input type='reset' value='Cancella'>
									</td>								
								</tr>	
							</table>
						</form>

						</div>
					</div>
					
			</td>
		</tr>

</div>
";	
}
echo"
		<tr>
			<td colspan='3' class='col5comm'>leggi tutti i post</td>
		</tr>
	</table>
";
				
?>

inoltre vorrei visualizzare gli "a capo". grazie
 
ciao
prova semplicemente senza usare la function my_htmlspecialchars($var)

PHP:
	//....
	$commento_sito = htmlspecialchars($resrow_sito[3]); 
	//.....

in che senzo vorresti visualizzare gli "a capo"? cioè a video vuoi che la riga vada a capo?
prova a usare agiungendola la funzione nl2br()

PHP:
	//....
	$commento_sito = nl2br(htmlspecialchars($resrow_sito[3])); 
	//.....

p.s.
nl2br() trasforma i \n eventualmente presenti in <br />
 
ho provato ma ora mi va a capo troppo, ogni tre o quattro parole, non riesco a capire il motivo sinceramente. Lo spazio tra le righe le voglio solo quando l'utente va a capo. Che cosa sono \n? Mentre htmlspecialchars non va, ho provato anche ad inserire un messaggio con parole accentate ma appaiono ancora quei caratteri.
 
ciao
diciamo che gli \n sono gli a capo in formato testo (che l'html non capisce).
generalmente vengono inseriti quando in un campo di input di un form premi l'enter per andare a capo.
verifica con vedi sorgente del bw non siano doppi.
per i caratteri accentati guardo se trovo qualcosa e poi, spero, ti sò dire.
 

Discussioni simili