Kezdőoldal » Számítástechnika » Programozás » PHP: visszaperjelek cseréje...

PHP: visszaperjelek cseréje str_replace-val uw-n. Hogyan?

Figyelt kérdés

Ü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. :)



#php #input #str_replace #visszaperjel #backlash #karakterek cseréje
2013. máj. 25. 15:02
 1/6 anonim ***** válasza:

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?

2013. máj. 25. 15:21
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
A real_escape nem jó, mert nem adatbázishoz akarom használni, hanem fájlba mentéshez. De sajnos bezavarnak a visszperjelek.
2013. máj. 25. 18:46
 3/6 anonim ***** válasza:

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.

2013. máj. 25. 19:18
Hasznos számodra ez a válasz?
 4/6 Drone007 ***** válasza:

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 :) ):

[link]


Sok sikert!

2013. máj. 26. 10:25
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:

Ü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?

2013. máj. 26. 17:55
 6/6 Drone007 ***** válasza:
Úgy tűnik :)
2013. máj. 26. 23:22
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!