You are not logged in.

  • Login

1

Wednesday, July 18th 2007, 5:52am

alles klar ich habe mit den preg_ Commands noch nicht viel gemacht deshalb frage ich nochma ^^

mal noch fix eine andere frage:

Wie kann ich denn links makieren also erkennen lassen wenn zum beispiel

Quoted

http://
oder

Quoted

www.


davor steht ?
also wenn ich sagen wir mal so einen text habe:

Quoted

Willkommen! www.domain.tld unsere Homepage

das er das makiert wie in phpbb ^^

2

Wednesday, July 18th 2007, 7:28am

hi,

das ist ja keine "markierung" im herkömmlichen sinn.

eigentlich stehen da nur die tags <a href="www.domain.tld">www.domain.tld</a> drumrum.

um das automatisch zu machen musst du den string so durchsuchen das alles was am anfang http bzw www und am ende eine der vielen .tld´s hat in die o.g. <a ...> </a> tags gesetzt wird.

da es mittlerweile ziemlich viele tlds gibt würde der regexp ziemlich lang werden. ist evtl sinnvoller diese in nem array bzw datenbank/text datei zu speichern und mit substr() o.ä. durchzugehen...


mfg da BendIt

3

Wednesday, July 18th 2007, 8:34am

Ah okay ^^
gibt es das schon irgendwo fertig oder könntest mir zeigen wie das funzt (codeschnipsel etc. ) ?


:arrow: Dies ist mein 100ster POST Juhu!

4

Wednesday, July 18th 2007, 8:48am

Mir is grad was eingefallen... gibt ja die schöne funktion parse_url() ;)

also wenn du die url über eine eigene eingabe zeile im formular abfragst geht das total easy....

PHP Quellcode

1
2
3
$testurl = $_REQUEST['user_url'];
$urlarr = parse_url($testurl);
echo '<a href="'.$urlarr['scheme'].'://'.$urlarr['host'].'">'.$urlarr['host'].'</a>';


nachzulesen hier -> http://selfphp.de/funktionsreferenz/url_funktionen/parse_url.php

müsstest natürlich noch anpassen, aber im groben sollte das funzen.

anstatt echo dann eben die variable in der du das dann an richtiger stelle wieder ausgeben kannst...


mfg da BendIt

5

Wednesday, July 18th 2007, 8:56am

naja das geht ja net ^^
weil ich habe ein großes textfeld wo der Benutzer was eingeben kann und wenn er z.b. www.domain.tld irgendwo im text drinne hat soll er diesen verlinken und anderst farbig makieren in der ausgabe

6

Wednesday, July 18th 2007, 9:09am

bist du sicher das du diese funktionalität haben möchtest?

Das ist imho technisch und auch rechtlich nicht ganz unbedenklich.

Technisch: der Benutzer kann irgendwelche links da rein posten (evtl sogar spammen) und du hast so keine kontrolle was für links da möglicherweise gespeichert werden. ist vlt nicht sehr gefährlich aber nerven kann es schon (siehe dies sinnfreien onlinegames mit vampieren usw :roll: )

Rechtlich: musst du höllisch aufpassen auf welche seiten deine nutzer dann verlinken. dann brauchst nen disclaimer / haftungsausschluss der aber auch inhaltlich stimmen sollte.

bist du dir wirklich sicher das du das so haben möchtest? der aufwand da nen extra url filter bzw eine art "freischaltung" der links zu implementieren wäre dann imho pflicht.

mfg da BendIt

7

Wednesday, July 18th 2007, 9:32am

ähm ja ich möchte das für eine vorschau benutzen weil ich baue doch an einem Webinterface für teamspeak und da soll der ssa nachrichten an den TS senden können und in der vorschau möchte ich dem ssa genau das selbe anzeigen wie er es im ts sendet ! deshalb währe das ganze schon top wenn es gehen würde

8

Wednesday, July 18th 2007, 9:50am

aso,

na wenn du dir da sicher bist...

da bietet sich ereg_replace() bzw eregi_replace() an.

http://selfphp.de/funktionsreferenz/regulaere_ausdruecke_posix/eregi_replace.php

müsstest dir dann nur noch ein regulären ausdruck zusammen stellen der auf strings prüft die:

am anfang entweder http:// oder www. oder irgendeine andere subdomain enthält.
am ende die tld hat, evtl mit abschließendem / dazwischen keine leerzeichen aber evtl auch ordnernamen bzw dateinamen enthalten kann...

evtl kann dir sowas mal jemand zusammenbasteln. bin schon ne weile raus aus regexp´s :(

sry

mfg da BendIt

9

Wednesday, July 18th 2007, 1:21pm

das währe cool wenn mir das ma jemand "zusammenbasteln" würde ;)
thx

10

Wednesday, July 18th 2007, 4:58pm

Hab mal ne einfache Lösung erstellt. kann man noch erweitern.
PHP URLs in Text hervorheben

PHP Quellcode

1
preg_replace('/(http:\/\/[^ ]+)/i', '<a href="$1">$1</a>', $string);

11

Wednesday, July 18th 2007, 6:34pm

hmm gut das funzt schon ma jetzt wenn das noch gehen würde mit www. erkennung währe ganz geil !!
schonma thx an dich d0nUt!

12

Wednesday, July 18th 2007, 7:13pm

wiki updatet - habe nun den Code aus dem phpbb2 verwendet.

13

Wednesday, July 18th 2007, 10:43pm

hmm währe net schlecht wenn du in die wiki noch die codes für IMG,PHP Highlighting,B,I,U hinzufügen würdest ^^

aber iwie funzt das net über mehrere zeilen hinaus ! Leider
da er den BB nur für einen string erkennt

14

Thursday, July 19th 2007, 8:25am

Quoted from ""marcel""

hmm währe net schlecht wenn du in die wiki noch die codes für IMG,PHP Highlighting,B,I,U hinzufügen würdest

Im Wiki gehts um Verständnis - nicht darum alle Funktionen abzubilden.
Nimm dir dazu doch besser eine BBCode Parser Klasse. z.B. http://www.christian-seiler.de/projekte/php/bbcode
Gibt auch schon einige Threads dazu in diesem Forum.

Quoted from ""marcel""

aber iwie funzt das net über mehrere zeilen hinaus ! Leider
da er den BB nur für einen string erkennt

Kann ich nicht bestätigen. Wie wäre denn ein solches Beispiel?

15

Thursday, July 19th 2007, 3:40pm

habe das ganze mal so probiert

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
		if (!empty($_POST['msg']))
		{
			$austext=preg_split("/\r\n|\r/", $_POST['msg']);
			foreach ($austext as $tx)
			{
				  $ret = ' '.$tx;
				  // matcht protokolle http:// oder ftp:// oder skype://
				  $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
				  // macht urls die mit www oder ftp beginnen
				  $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
				  // macht email adressen
				  $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
				 // macht B - Bold STRONG Tags
				 $ret = preg_replace("#\[b\](.*?)\[/b\]#si", "<strong>\\1</strong>", $ret);		
				 // macht I KURSIV EM Tags
				 $ret = preg_replace("#\[i\](.*?)\[/i\]#si", "<em>\\1</em>", $ret);		
				 // macht Unterstriche mit style objekten 
				 $ret = preg_replace("#\[u\](.*?)\[/u\]#si", "<span style=\"text-decoration:underline\">\\1</span>", $ret); 
				 // bilder einbeziehen
				 $ret = preg_replace("#\[img\](.*?)\[/img\]#si", "<img src=\"\\1\"></img>", $ret);
   			    	 // entfernt unsere einrueckung wieder
				  $tx_new = substr($ret, 1);	
				  $ausgabe.=$tx_new.'<br/>';
			};
		};
 
print $ausgabe;
?>
 
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
  <label>
  <textarea name="msg" id="msg" cols="45" rows="8"></textarea>
  </label>
  <br>
  <label>
  <input type="submit" name="submit" id="submit" value="Senden">
  </label>
</form>


ich mein urls werden unmöglich mit einem \n getrennt werden daher fällt das net so auf aber wenn ich jetzt das "b" verwende und einen absatz mache dann bekomme ich nen fehler ausgegeben oder er kann damit nix mehr anfangen mit dem "" Zeile \n Zeile ""

16

Thursday, July 19th 2007, 3:47pm

warum splittest du denn nach Zeile?

Falls du die Trennung nach Zeile doch für was anderes brauchst. Dann wende erst die regulären Ausdrücke und dann die Zeilentrennung an.

17

Thursday, July 19th 2007, 3:52pm

na ka wie denn sonst =??

18

Thursday, July 19th 2007, 4:06pm

PHP Quellcode

1
$ausgabe = nl2br(make_clickable($_POST['msg']));

19

Thursday, July 19th 2007, 4:17pm

ah hast recht

so geht das besser ^^


so wie könnte man das ganze jetzt noch mit highlight_string() machen
so das man php zeilen highlighten kann ?

20

Thursday, July 19th 2007, 4:34pm

Example 1699. Using the 'e' modifier

PHP Quellcode

1
2
3
4
5
<?php
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
             "'\\1'.strtoupper('\\2').'\\3'",
             $html_body);
?>


This would capitalize all HTML tags in the input text.

Similar threads

Social bookmarks