webForumDet fria alternativet

Filtrera bort vissa HTML-taggar

PHP

7 svar · 231 visningar · startad av Swey

Medlem sedan apr. 20003 971 inlägg
Frågan#1

Hej,
Hur kan man på ett enkelt sätt med reguljära uttryck filtrera bort vissa HTML-taggar och ersätta med < respektive >?

Om jag vill tillåta <b> och <i> ska alla andra ersättas med <någonting>.

Går detta att lösa på ett enkelt och snabbt sätt?

------------------
- Swey
Bäst, vackrast, styggast...

Medlem sedan jan. 20007 697 inlägg
#2

Kanske inte det smidigaste men borde du inte kunna göra så här?

$content = str_replace ( "<" , "<" , $content );
$content = str_replace ( ">" , ">" , $content );

$content = str_replace ( "<b>" , "<b>;" , $content );

Är som sagt absolut inte det smidigaste, men du får väl tänka själv också ;)

------------------
Agent 002 - med rätt att surfa

[Redigerat av Kim den 16 sep 2000]

Medlem sedan apr. 20003 971 inlägg
#3

Jo, men jag tänkte om det gick att lösa med reguljära uttryck på ett smidigt sätt. Är inte så bra på just det. :)

------------------
- Swey
Bäst, vackrast, styggast...

Medlem sedan feb. 20001 507 inlägg
#4

Vet ej om detta går men i Notepad har du funktionen *Replace..* eller något sådant. Kam du inte göra det där :q

------------------
JaktJanne

"Vi är resultatet av vad vi tänker."
- Buddha

Medlem sedan jan. 20007 697 inlägg
#5

Han vill nog att det ska göras automatiskt på inlägg från t.ex. en gästbok. Detta för att man inte ska kunna lägga in exempelvis en H1-tagg och förstora texten enormt.

------------------
Agent 002 - med rätt att surfa

Medlem sedan dec. 19992 555 inlägg
#6

Om $str innehåller strängen som skall filtreras:

$str = preg_replace("#<((?!(/?b>&#0124;/?i> )).*?)>#i", "<\\1>", $str);

(Observera att webForums script stoppar in ett mellanslag mellan ?i> och ) - det skall inte vara där).

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 17 sep 2000]

Medlem sedan apr. 20003 971 inlägg
#7

Tack, Robban... det fungerade fint!

Men nu verkar det som om <b> eller <i> påverkar all text efteråt. Det spelar ingen roll om <i> står i en egen cell.

Går det att fixa så att sluttag krävs på nått sätt?

------------------
- Swey
Bäst, vackrast, styggast...

Medlem sedan dec. 19992 555 inlägg
#8

Nu börjar vi komma in på områden där en parser skulle fungera bättre. Men prova följande (inte fullt testat):

$patterns = array("#<((?!(/?b>&#0124;/?i> )).*?)>#i", "#<(b&#0124;i)>(?!.*?</\\1> )#i");
$replacements = array("<\\1>", "<\\1>");
$str = preg_replace($patterns, $replacements, $str);

(Samma sak här - forumscriptet petar in ett mellanslag mellan > och ) som måste tas bort för att det skall fungera).

------------------
Robban < robban@lipogram.com >

268 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)