Just nu i M3-nätverket
Gå till innehåll

Sätta in kod från sträng till variabel


sjohan

Rekommendera Poster

Hej. Jag har två frågor. Jag håller på med en avancerad php gästbok som projekt i Programmering A i skolan. Nu så vill jag fixa två saker som jag inte riktigt vet hur jag ska göra.

 

1. Jag vill sätta in allt som finnns mellan [link] och [/link] i variaeln $link så att jag kan göra om dom till hemsidelänkar.

 

2. Jag vill hindra folk från att använda HTML taggar i gästboken. Jag har nu löst det genom att ersätta alla < med lt; och alla > med gt; problemet är ju att alla ser att folk försökt använda html och det är ju inte så fint. Borde gå att ersätta på samma sätt som [link] men man vet ju aldrig. I ASP finns finns en funktion för detta PHP kanske också har det.

 

Jättetacksam för svar

Mvh Johan Sjögren

Länk till kommentar
Dela på andra webbplatser

Gällande fråga 2 så hittar nu kanske ett svar här:

 

//eforum.idg.se/viewmsg.asp?EntriesId=353519#353672

 

Jag får ett tips från Cariad hur man använder reguljära uttryck för att ta bort HTML och JavaScript o dylikt

 

[inlägget ändrat 2002-11-01 12:04:32 av Divine Light]

Länk till kommentar
Dela på andra webbplatser

Svar på fråga nummer 1:

 

$string = "[link=http://www.sajt.bla]sajt[/link]";

 

$string = preg_replace("'\[link=(.*?)\](.*?)\[/link\]'is", "<a href=\"$1\" target=\"_blank\">$2</a>", $string);

 

echo $string;

 

med denna kod kan du alltså skriva "[link=http://www.sajt.bla]sajt[/link]" och det omvandlas till <a href="http://www.sajt.bla" target="_blank">sajt</a>

 

/krisskross

[inlägget ändrat 2002-11-01 13:26:29 av krisskross]

Länk till kommentar
Dela på andra webbplatser

Förklaring av:

$string = preg_replace("'\[link=(.*?)\](.*?)\[/link\]'is", "<a href=\"$1\" target=\"_blank\">$2</a>", $string);

 

- preg_replace() är en reguljär uttrycks-funktion, som söker i strängen som anges som tredje argument (i detta fall $string) efter träffar engligt mönstret i första argumentet (i detta fall "'\[link=(.*?)\](.*?)\[/link\]'is").

Dessa ersätts sedan med det andra argumentet ("<a href=\"$1\" target=\"_blank\">$2</a>").

 

- Match-strängen i detta fall, "'\[link=(.*?)\](.*?)\[/link\]'is", betyder bit för bit:

\[link= matchar texten "[link="

(.*?) matchar vad som helst. Denna bör egentligen bytas ut mot [^\]]*? vilket betyder matcha vad som helst, men inte ett ]-tecken. Att det står paranteser runt texten bedtyder att den ska lägga in det i en variabel, i detta fall \\1 eftersom det är den första parantes-stasen.

 

Sedan kommer en ytterligare en sats med paranteser, likandan som den första. Variabel \\2.

 

Och till sista \[/link\] som matchar slutet [/link]

 

Sen har du ersättssträngen, med $1 och $2. Dessa är nu de variabler som skapats i matchningen, och kan antingen anropas med \\1 eller $1. Jag föreslår att du använder dig avv \\1 och \\2 så du inte råkar få med några andra PHP-variabler istället.

 

 

[inlägget ändrat 2002-11-01 14:01:37 av Cariad]

Länk till kommentar
Dela på andra webbplatser

Nu på senare tid har det blivit väldigt mycket om reguljära uttryck här på PHP-forumet. Detta är ju både bra och dåligt.

Bra, eftersom det är en väldigt användbar sak, men dåligt eftersom man hela tiden måste förklara om och om. ;)

 

Här är en länk till en annan pågående diskussion om reg.ex. där du hittar lite länkar m.m.

//eforum.idg.se/viewmsg.asp?EntriesId=354056

 

Du kan också testa att söka i PHP-forumet efter reguljära uttyck, regular expression eller funktionesnamnen, preg_replace och preg_match. Du kommer nog att få en del träffar.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...