ugrás a tartalomhoz

reguláris gond

Thom · 2004. Júl. 17. (Szo), 20.05
Órák óta gyűröm magam, nem jön össze egy működő reguláris szűrés.
Egy bejövő stringben kellene minden előforduló mintát cserélni így:
Bejövő minták:
[A href='ezbarmilehet.com']
[A href='ezbarmilehet.com' target='_blank']
[A href='ezbarmilehet.com' masparameter='akarmi' target='_blank']

Ebből csak a 'href' és - ha van - a 'target' mehetne a kimenetre, más nem. A minta természetesen többször is előfordulhat eltérő linkekkel a bejövő stringben.
Könyvespolc feltúrva, ismert webhelyek végigbogarászva. Valószínűleg nem túl bonyolult a dolog, ezért is elég flusztráló a lámaságom...
Tud valaki "segítő jobbot" nyújtani ebben?

Üdv: Thom
 
1

str_replace?

T.G · 2004. Júl. 17. (Szo), 21.21
Szerintem egy sima str_replace-vel gyorsabb futási eredményt érnél el...
Összedobott megoldás, amit nem nagyon ellenőriztem...
elsőre jónak tűnik...

<?php
$a = array( "[A href='ezbarmilehet.com']", "[A href='ezbarmilehet.com' target='_blank']", "[A href='ezbarmilehet.com' masparameter='akarmi' target='_blank']" );

foreach($a as $i) {
	echo preg_replace("!\[(A href='([^']*)')(( target='_blank')|( [^=]*='([^']*)'))*\]!","<\\1\\4>\\2</a>", $i);
}
?>
2

Köszi, ez kellett

Thom · 2004. Júl. 17. (Szo), 21.52
Köszi a segítséget. Első látásra azt csinálja, amit akarok.
Én az ereg_replace() -val próbálkoztam, a str_replace() -val szerintem nem lehet a fenti feladatot megoldani (mert a mintában az "ezbarmilehet" valóban bármilyen link lehet, és a lényeg az volt, hogy a 2 paraméteren kívül minden mást kiszűrjünk). El is jutottam magamtól az ún. atomokra bontásig/összerakásig, mégsem volt okés.
Ezt most fel fogom boncolni, mi-mit-miért csinál pontosan, hogy ne kelljen a következő ilyen hasfájással is ide szaladnom.

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]
3

volt közben egy módosítás...

T.G · 2004. Júl. 17. (Szo), 21.57
Egyszer módosítottam közben, nézd meg, hogy ne a régebbit elemezzed...
Sok fölösleges zárójel kikerült...
4

Aha, jó, hogy szólsz

Thom · 2004. Júl. 17. (Szo), 22.11
Aha, jó, hogy szólsz.
(de különben mi szinte szomszédok lennénk, nézd csak meg...)
Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]
5

preg_replace ujjgyakorlat...

Thom · 2004. Júl. 18. (V), 09.16
Azért némileg fejlődőképes vagyok ;-)
Az ajánlott minta ujjgyakorlatként kissé átalakítva, ez felhasználói adatbevitelnél a képekből szűri ki a nemkíválatos paramétereket. Hátha valakinek hasznára válik:
$minta1 = "!\[([iI][mM][gG] [sS][rR][cC]='([^'][a-zA-Z0-9-_/:\.]+)')(( [wW][iI][dD][tT][hH]='([^']*)')|( [^=]*='([^']*)'))(( [hH][eE][iI][gG][hH][tT]='([^']*)')|( [^=]*='([^']*)'))(( [bB][oO][rR][dD][eE][rR]='([^']*)')|( [^=]*='([^']*)'))(( [aA][lL][tT]='([^']*)')|( [^=]*='([^']*)'))*\]!";
$csere1 = "<IMG src='$2' width='$5' height='$10' border='$15' alt='$20' title='$20' />";
$string = preg_replace($minta1, $csere1, $string);

Tesztelve működik, de azért lehet, hogy h**ségeket hordtam össze.
Kár, hogy a fv. nekem egy kicsit még mindig 'fekete doboz'.

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]
6

Ekvivalens

Hojtsy Gábor · 2004. Júl. 18. (V), 11.15
Ezzel elméletileg ekvivalens hatású, de jóval könnyebben olvasható:

<?php
$minta1 = "!\[(img src='([^'][a-zA-Z0-9-_/:\.]+)')(( width='([^']*)')|( [^=]*='([^']*)'))(( height='([^']*)')|( [^=]*='([^']*)'))(( border='([^']*)')|( [^=]*='([^']*)'))(( alt='([^']*)')|( [^=]*='([^']*)'))*\]!i";
?>
Csak egy i módosítón múlik, és máris megtalálja a ki és nagybetűs változatokat is, nem kell külön megadni :) További egyszerűsítési lehetőségeket most nem vizsgáltam :)
7

Hmm valóban, valóban. Ugyan

Thom · 2004. Júl. 18. (V), 15.37
Hmm valóban, valóban. Ugyanazt csinálja.
Nos, akkor már tudok magamnak faragni reguláris varázslatot, csak még azt nem tudom, hogyan csinálom ;-) Jó lenne azt is tudni, hol mérik a hozzá való okosságot. Én eddig erről csak a php-manual fv.leírását találtam, az pedig elég szűkszavú. Én meg olyan vagyok, mint a régi mesefilmben: 'mindent_tudni_akarok' (már aki emlékszik rá). Azaz találok valami emészthető leírást is ezekhez?
Ahogy már említettem, nagyon flusztráló, ha valamit nem tudok, amit pedig illene.
Goba! egyébként még mindig abban az xss szűrésben mesterkedem, amiről leveleztünk.

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]
8

Könyv

Hojtsy Gábor · 2004. Júl. 18. (V), 19.22
9

Köszi

Thom · 2004. Júl. 18. (V), 19.41
Köszi. Gondolom a weben nincs semmi hasznos ebben a témában, úgyhogy muszáj leszek pénzt költeni.

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]
10

Angolul

Hojtsy Gábor · 2004. Júl. 18. (V), 19.45
Angolul nyilván van termérdek, magyarul nem igazán tudnék tippet adni. Én általában kisebb kérdések miatt szoktam keresgélni, akkor pedig Google megmondja, mit hol találok...
11

Megvárhatod...

Bártházi András · 2004. Júl. 19. (H), 06.27
Hát, előbb-utóbb születnek nálunk is cikkek majd a témában, ha gondolod, kivárhatod. :) De hogy mikor, azt nem tudom.

-boogie-
12

Tanulni kell...

Thom · 2004. Júl. 19. (H), 09.21
Megveszem-megtanulom az ajánlott könyvet és megírom a cikket ;-)
(ez csak jópofáskodás lenne, mert én sem tudom, mikor jutnék el odáig.)
Tkp. átírtam a hétvégén regulárisra, amit akartam ('[' típusú formázások kezelése, xss védelem, linkesítés, smiley kezelés stb.), csak az optimalizáláshoz hiányoznak a részletes ismeretek. Úgyhogy azt hiszem, megveszem a könyvet és az időm függvényében majd apránként hozzátanulgatok a többihez.

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]