-
aiutino ereg_replace...
ok, sn tornato a kiedere qlcsina :mrgreen:
nella mia bakeka voglio fare in modo ke prima d aggiungere il msg nel db venga controllato se c sn segni preimpostati (faccine) e convertirli in <img src.....>, il codice
Codice PHP:
$msg = $_POST['msg'];
$msg2 = strip_tags($msg, '<b>,<i>,<u>,<br>'); //elimina tutti i tag html tranne qll in lista
$f1 = '<img src="immagini/icon_smile.gif">';
$testo1 = ereg_replace(':)', $f1, $msg2); //inizia il controllo faccine e sostituzione in img
$f2 = '<img src="immagini/icon_smile_sad.gif">';
$testo2 = ereg_replace(':(', $f2, $testo1);
$f3 = '<img src="immagini/icon_smile_big.gif">';
$testo3 = ereg_replace(':D', $f3, $testo2);
$f5 = '<img src="immagini/icon_smile_shock.gif">';
$testo5 = ereg_replace(':o', $f5, $testo3);
$f6 = '<img src="immagini/icon_smile_sleepy.gif">';
$testo = ereg_replace('^^', $f6, $testo5);
non da errori di alcun tipo, semplicemente cm stringa finale restituisce solo l'ultima immagine presente, cm risolvo?
e poi, un modo per nn avere troppe variabili: posso riutilizzare lo stesso nome?
tipo $testo=ereg_replace(blablabla,$testo); oppure no?
grazie in anticipo, se nn capite qlcs kiedete :mrgreen:
-
Quindi deduco che è una formattazione!
Tre consigli:
1) non fai controlli sulle lunghezze (i caratteri) delle parole
2) ereg_replace non è il metodo migliore per formattare
3) strip_tags non è di certo il metodo migliore per la formattazione del testo
Una pagina così è vulnerabile al 40%
Io ho una formattazione che esegue dei controlli e che formatta anche in maniera diversa. Se vuoi te la posto. A prima occhiata sembrerebbe complicata ma se gli dai un minuto vedrai che non è poi così tanto difficile
-
se puoi passarmela t ringrazio vivamente :mrgreen:
edit: più ke formattazione convertire combinazioni in immagini :D
-
Ecco a te ! L'ho fatto io! Se c'è qualcosa che non è chiaro dimmi pure!
L'ho adattato in parte al tuo caso...ho messo solo 3 codici e faccine! Basta immettere tutti i codici in array_codici e i nomi delle gif in array_faccine e il gioco è finito
Attenzione: a un codice c'è una faccina quindi il totale degli elementi dei due array DEVE essere uguale!
Codice:
$array_codici=array(':(' , ':(' , ':D');
$array_nomi=array('icon_smile.gif' ,'icon_smile_sad' ,'icon_smile_big.gif');
$testo = isset($_POST['testo']) ? $_POST['testo'] : null;
$testo = stripslashes(htmlspecialchars($testo));
$testo = nl2br($testo);
if($testo != null && trim($testo) != '') {
$parole = explode(' ' , $testo);
$num_faccine=0;
$fermo=0;
for($i=0 ; $i<count($parole) ; $i++) {
for($j=0; $j<count($array_codici); $j++) {
if(isset($array_codici[$j])) {
if($parole[$i] == $array_codici[$j] ) {
$parole[$i] = trim($parole[$i]);
$parole[$i] = ' <img src="immagini/'. $array_nomi[$j] .'"> ';
$num_faccine++;
}
if(strlen($parole[$i]) > 50) {
$fermo = 1;
break 2;
}
}
}
}
if(!$fermo) {
echo $testo = implode(' ', $parole); // testo formattato alla grande
echo $num_faccine;
} else {
echo "Hai inserito una parola con troppi caratteri";
}
}
Succede che alla fine hai il tuo testo formattato e hai il numero di faccine immesse!
Succede anche che se l'utente immette una parola con più di 50 caratteri la formattazione si perde e non succede niente!
Si potrebbe, anzi si dovrebbe continuare con la verifica, ma credo che così può bastare
-
Mi sono dimenticato di dirti che non ho potuto provare lo script!
Se ti da qualche errore posta pure che vediamo di risolvere il tutto...
-
sure, grazie nix ora lo collaudo e t faccio sapere :mrgreen:
-
per le faccine usa $testo = str_replace(":)","<img src=..",$testo);
per il controllo dei tag ti basta che non vengano stampati caratteri malevoli tipo < e > e che vengano convertiti nei corrispettivi in html,per farlo usa la funzione $testo = htmlentities($testo);
cmq si,puoi scrivere sempre $testo e non $testo1,$testo2..
-
ok, ho fatto benchmark cn gli script ^^
solo alla fine vi svelerò ke codice ho usato
nix82 : 0.0031681060791 secondi
marcio : 0.00305485725403 secondi
ed ecco il codice usato
Codice PHP:
$testo = strip_tags($msg, '<b>,<i>,<u>,<br>');
$testo = nl2br($testo);
$testo = str_replace(":)","<img src=immagini/icon_smile.gif>",$testo);
$testo = str_replace(":(","<img src=immagini/icon_smile_sad.gif>",$testo);
$testo = str_replace(":D","<img src=immagini/icon_smile_big.gif>",$testo);
$testo = str_replace("^^","<img src=immagini/icon_smile_sleepy.gif>",$testo);
all'inizio ho provato qll d nix ma nn inserisce i dati perkè restituisce null allora ho visto il post d marcio, mi servivano alcuni tag html (ma tra un po' tolgo pure quelli) e quindi ho rimesso la funzione strip_tags ^^ grazie a entrambi ^^ (ora cn calma m guardo meglio lo script by nix :mrgreen:)
-
Se ti restituisce null allora significa che non hai nominato il textarea con il nome "testo"
-
ora controllo e testo, rifaccio il benhmark e carico il + veloce :mrgreen: