PHP: visszaperjelek cseréje str_replace-val uw-n. Hogyan?
Üdv! Nem tudom kicserélni egy beviteli mezőből érkező szövegben a visszaperjeleket. Mi lehet a gond? Vajon miért nem sikerül?
Kódrészlet:
$mit = array('#',';','|','\\\\');
$mire = array('*','*','*','*');
$inp_a = str_replace($mit, $mire, $inp_a);
Szeretném, ha valaki rávezetne a problémám megoldásra. Előre is köszönöm. :)
Nem lenne jobb regexp-el megnézni, hogy a $mit szövegben van-e mysql lekérdezésre utaló karaktere( mert látom ezeket tetted bele a tömbe),
és ha van, akkor végig menni a stringen és kicserélni őket.
De nem jó a mysql_real_escape függvény?
a visszaper jelet backslash-nek hívják:)
Nézz utána a reguláris kifejezéseknek, a példa lehet számodra egy "reguláris" lesz.
Egyetlen függvénnyel meg lehet csinálni amit te szeretnél mutatok egy dátum-os példát:
$datum = "2006. 7. 22.";
$ujdaum = ereg_replace ('([0-9]{4})[^0-9]*([0-9]+)[^0-9]*([0-9]+)[^0-9]*', '\1-\2-\3', $datum);
echo ($ujdaum); // eredménye: 2006-7-22
Ez át lehet alakítani alfabetikus jelekre is. Annyira én se értek hozzájuk, de szerintem így egyszerűbb lenne ha tudnám:)
A te megoldásod kijavítva pedig így néz ki:
$mit= array('#',';','|','\\\\');
for($i=1;$i<strlen($szoveg);$i++)
{
$ertek=substr($szoveg,$i,1);
foreach ($mit as &$ertek)
{
$szoveg=substr_replace($szoveg,"#",$i,1);
}
}
valami ilyesmi a kódót előre szólók fejből írtam, és én php-s abszolút nem vagyok inkább a c++-hoz értek, de csináltam már rég egy weboldalt.:) Szal lehet van benne hiba, és biztos van is jobb megoldás.
Itt egy függvény (php), amit én szoktam használni:
Megtisztítja a szöveget a html elemektől, scriptektől, spec jelektől. Beletettem neked a / jel átalakítását is *-ra.
function tisztit($text){
$mit = array ("'<script[^<]*?>.*?</script>'si", // javascript eltüntetése
"'<[\/\!]*?[^<>]*?>'si", // HTML elemek eltüntetése
"'([\r\n])[\s]+'", // térközök
"'&(quot|#34);'i", // HTML entitások
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'\/'",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i");
$mire = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
"*"
chr(161),
chr(162),
chr(163),
chr(169));
return preg_replace ($mit, $mire, $text);
}
Remélem segít. Ha mégsem, itt olvashatsz a regex mintákról (ez másnak is hasznos lehet, aki használni szeretné, de eddig kínai volt :) ):
Sok sikert!
Üdv! Végülis preg_match segítségével oldottam meg a problémámat. A módszer eltér attól, amit én akartam: nem cserélgetem a zavaró karaktereket, hanem egyszerűen nem engedem, hogy lehessen őket használni. Végülis így is célba értem. :) Megírtam a hozzávalót, leteszteltem, és működik. (remélem.) Leírom, hátha valaki tudna még mit csiszolni rajta:
if(preg_match('/^[a-zA-Z0-9\\.\\:\\,\\!\\?\\/\\=\\&\\@\\-\\_]{1,10}$/' , $inp_a)) {
//műveletek folytatása
}
else {
//vissza a feladóhoz
}
Tehát ha minden igaz, akkor most csak az angol betűk, számok, és .:,!?/=&@-_ jelek jöhetnek át, 1-től 10 karakterig, igaz Drone?
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!