Advertentie | |
|
![]() |
|
Verwijderd
|
Ik houd 'al' mijn Perl vragen maar even in één topic
![]() Ik ben dus bezig met een forum te maken. Nu wil ik, net zoals hier, dat URL's automatisch worden omgezet. Ik heb dit: Code:
$bericht =~ s/(.*)(\"{0})(\]{0})(={0})(http\:\/\/)(.+)( *)/$1\[url\]$5$6\[\/url\]$7/gis; ![]() Waarom niet? |
![]() |
|
Verwijderd
|
Bleh maak er liever een multiline regexp van, zo moet ik het helemaal ontcijferen.
Anyways, door die $7 not-greedy te maken en wat andere veranderingen lijkt het nu wel te werken: Code:
$bericht =~ s!(.*)(\"{0})(\]{0})(={0})(http\://)(.*?)\s!$1\[url\]$5$6\[/url\] $7!gis; |
![]() |
||
Verwijderd
|
Citaat:
![]() ![]() Hoe maak ik iets not-greedy dan? (btw, hij doet het niet :/) |
![]() |
|
Verwijderd
|
Code:
$bericht = "bericht http://www.huiswerkservice.nl bericht"; $bericht =~ s!(.*)(\"{0})(\]{0})(={0}) #rommel (http://) #$5 (.*?) #rest van url ($6) \s !$1\[url\]$5$6\[/url\] $7!gisx; #<= deze x maakt 't een multiline regexp print $bericht; De fout in mijn code hierboven is dus vooralsnog dat 't alleen met berichten met een spatie achter de url werkt. Ik had wat andere dingen geprobeert maar dat lukte niet echt... |
![]() |
|
Verwijderd
|
Het is niet echt optimaal op deze manier, maar 't werkt (of dat denk ik tenminste):
Code:
$bericht = "bericht http://www.huiswerkservice.nl bericht"; $bericht =~ s!(.*)(\"{0})(\]{0})(={0}) #rommel (http://) #$5 ((.*?) #rest van url ($6) ([^\w/.]) |(.*)) !$1\[url\]$5$7$9\[/url\]$8!gisx; print $bericht; |
Advertentie |
|
![]() |
|
Verwijderd
|
Alleen ik zit met hex-code
![]() Code:
$bericht =~ s !(.*?)(\"{0})(\]{0})(={0}) # $1-$4 (http\%3A\%2F\%2F) # $5 (.+) #$6 ((\%0D\%0A)*|(\%20)*) #$7-$8 !$1\[url\]$5$6\[\/url\]$7$8 !gisx; %0D%0A is het nl/cr teken. %20 is spatie. Deze mogen dus ook vaker voorkomen achter elkaar ![]() Laatst gewijzigd op 09-08-2002 om 18:54. |
![]() |
|
Verwijderd
|
Als ik aan zoiets begin dan wil ik het ook wel afmaken. Gisteren had ik het nog even geprobeert met een bericht met twee urls, en dat werkte voor geen meter. Ik heb het nu verder afgemaakt gebaseerd op mijn vorige code:
Code:
$bericht = "bericht http://www.huiswerkservice.nl bericht http://www.iets-heel%20anders.nl/"; $bericht =~ s!#(.*)(\"{0})(\]{0})(={0}) #werkt gewoon zonder ({0} is *minimaal* nul) (http://) #$1 ((.*?) #begin van $2, $3 ([^\w/.%-]) #$4 |(.*)) #$5 en einde van $2 !\[url\]$3$5\[/url\]$4!gisx; print $bericht; #output: bericht [url]www.huiswerkservice.nl[/url] bericht [url]www.iets-heel%20anders.nl/[/url] |
![]() |
||
Verwijderd
|
Helaal, Chip Zero, jij gaat er vanuit dat er spaties enzo instaan, maar omdat het uit een textarea komt, is het geconverteerd naar + (bijvoorbeeld)
Zie hier een inhoud van wat in het scriptje binnenkomt: http%3A%2F%2Fwww.erikdokter.nl%0D%0Ahttp%3A%2F%2Fwww.erikdokter.nl+1%0 D%0A1+http%3A%2F%2Fwww.erikdokter.nl%0D%0A1+http%3A%2F%2Fwww.erikdokte r.nl+1 (zie ook http://www.erikdokter.nl/forum/?acti...opic&topicid=7) Citaat:
Code:
[ url]http://www.erikdokter.nl[/url] [ url=http://www.erikdokter.nl]Mijn forum[/url] Code:
(.*)(\"{0})(\]{0})(={0}) Code:
$bericht =~ s !(\%5D{0})(\%3D{0}) # Alles wat niet voor de http:// mag komen $1-$2 (http\%3A\%2F\%2F) # http:// zelf $3 (.+) # de rest van de url $4 ((\+)*) # Spatie $5 (.*) # $6 !$1\[url\]$3$4\[/url\]$5$6 !gisx; ![]() Laatst gewijzigd op 10-08-2002 om 12:38. |
![]() |
|
Verwijderd
|
Whooeeii!
Heppum! Heppum! (naja... half dan ![]() Code:
$bericht =~ s !(http\%3A\%2F\%2F) # http:// zelf $1 (.+?) #begin van $2 ((\ )|(\%0D\%0A)) # $3 $4 !\%5Burl\%5D$1$2\%5B/url\%5D$3$4 !gisx; Tevens wou die functie de hexwaardes omzetten naar normale waarden, en daarna de html-tags eruit filteren. De eikel! ![]() ![]() Nu alleen nog dat van een paar posts terug verwerken (met die url en img tags) en het is klaar ![]() ![]() *blij* |
![]() |
|
Verwijderd
|
D'r is wel zo'n standaardfunctie voor maar ik heb nooit zin om die op te zoeken. In plaats kopiëer ik de volgende subs uit een oud script:
Code:
sub url_encode { my($text) = $_[0]; # text to URL encode $text =~ tr/ /+/; # replace " " with "+" $text =~ s/[^A-Za-z0-9\+\*\.\@\_\-]/ # replace odd chars uc sprintf("%%%02x",ord($&))/egxo; # with %hex value return $text; # return URL encoded text } sub url_decode { my($t) = $_[0]; # URL encoded text to decode $t =~ tr/+/ /; # replace "+" with " " $t =~ s/%([A-F0-9]{2})/pack("C", hex($1))/egio; # replace %hex with chars return $t; # return decoded plain text } sub url_encode_full { #encode aangepast om alle chars om te zetten my($text) = $_[0]; # text to URL encode $text =~ tr/ /+/; # replace " " with "+" $text =~ s/./ # replace *all* chars uc sprintf("%%%02x",ord($&))/egxo; # with %hex value return $text; # return URL encoded text } |
![]() |
|
Verwijderd
|
Hmm... Ik zit nu met het volgende probleem.
Als ik de string '[ url]http://www.erikdokter.nl[/url]' (wel zonder spaties ![]() Code:
<a href="" title="http://http://www.erikdokter.nl" onclick="window.open('http://http://www.erikdokter.nl', '_window');">http://www.erikdokter.nl</a> Ik gebruik de volgende replace functie: Code:
$cTekst =~ s !(\[url\]) # Begin url $1 ([http\://]??) # Eventueel http:// strippen $2 (.+?) # url $3 (\[/url\]) # Eind url $4 !\<a href=\"\" title=\"http\://$3\" onclick=\"window\.open\(\'http\://$3\', \'_window\'\);\"\>$3\</a\> !gisx; '[ url]www.erikdokter.nl[/url]' heb. Vandaar dat http:// optioneel moet zijn (met ?? dacht ik...(of ?, of {0, 1})) |
![]() |
||
Verwijderd
|
Citaat:
![]() Code:
$cTekst =~ s !(\[url\]) # Begin url $1 <= dat hoeft toch geen $1 te zijn? (http://)?# Eventueel http:// strippen $2 <= vierkante haken stonden compleet verkeerd, dan zou het maar één teken zijn (.+?) # url $3 (\[/url\]) # Eind url $4 !\<a href=\"\" title=\"http\://$3\" onclick=\"window\.open\('http\://$3', '_window'\);\"\>$3\</a\> !gisx; |
![]() |
|||
Verwijderd
|
Citaat:
![]() Citaat:
![]() Dank ![]() |
![]() |
||
Verwijderd
|
Citaat:
|
![]() |
||
Verwijderd
|
Citaat:
![]() Weer wat geleerd ![]() |
![]() |
|
Verwijderd
|
Stomme PATTERNS ook...
Jemig. Er mag geen spatie komen na een [img]-tag... Code:
$cTekst =~ s !\[img\]# Begin image \ {0}# Geen spatie ? (http\://)?# Eventueel http:// strippen $1 (.+?)# url $2 \[/img\]# Eind image !\<img src=\"http\://$2\" alt=\"Plaatje niet gevonden\" title=\"http\://$2\" /> !gisx; \s{0} doet het ook niet... |
![]() |
|
Verwijderd
|
Umm waar ik $1 zei bedoelde ik dus $2. Maar dit moet 't dus worden:
Code:
$cTekst =~ s !\[img\]# Begin image (http\://)?# Eventueel http:// strippen $1 ([^\s]+?)# url $2 \[/img\]# Eind image !\<img src=\"http\://$2\" alt=\"Plaatje niet gevonden\" title=\"http\://$2\" /> !gisx; |
![]() |
||||
Verwijderd
|
Citaat:
Citaat:
![]() Citaat:
![]() |
![]() |
||||
Verwijderd
|
Citaat:
Wat ik me net bedenk trouwens, je moet er éigenlijk ook nog zorgen dat er geen javascript: urls worden toegestaan, een soort van bug in IE die dat dan gewoon uitvoert. Aan de andere kant, als ik jouw site in IE bekijk, misschien hoeft dat misschien ook weer niet ![]() Citaat:
![]() Citaat:
|
![]() |
||||
Verwijderd
|
Citaat:
Citaat:
![]() Wel een goeie trouwens. Zal ik eens naar kijken ![]() Citaat:
![]() |
![]() |
|||
Verwijderd
|
Citaat:
![]() Citaat:
|
Advertentie |
|
![]() |
|
|