Umbruch bei zu langen Links im Mozilla
Jeena Paradies
- browser
Hallo,
Wie kriege ich es hin dass zu lange Links auch im Mozilla umgebrochen werden und nicht über den Rand gehen?
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/
Die zu langen Links werden aber von Besuchern eingetragen und ich ändere sie dann mit der funktion (ich habe sie von http://www.dclp-faq.de/q/q-regexp-uri-klickbar.html):
// URI anklickbar machen
function replace_uri($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
}
Leider habe ich keine Ahnung wie ich da ein <br /> oder so was reibringe, was auch ein wenig blöd wäre denn die Textgröße kann ich ja nicht herausfinden wenn jemand auf 200% vergrößert ist ja weniger Platz da also müsste ich schon vorcher umbrechen wen jemand auf 75% stellt dann müsste es später abbrechen. Es müsste also irgendwie per css geschehen aber ich finde keine Lösung.
Grüße
Jeena Paradies
Hallo,
Es sollte heißen:
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/index.php#13
Grüße
Jeena Paradies
Hi,
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/
Es sollte heißen:
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/index.php#13
Ah! Jetzt weiß ich was Du meinst...
Gib halt nicht die gesamte URL als klickbaren Text an, sondern nur die ersten 30 Zeichen oder so (ggf. noch mit ...)
cu,
Andreas
Hallo,
Gib halt nicht die gesamte URL als klickbaren Text an, sondern nur die ersten 30 Zeichen oder so (ggf. noch mit ...)
Könntest du mit eventuell eine Seite zeigen aus welcher ich lernen kann damit umzugehen? Ich kapiere von der Funktion nichts. Und beschrieben ist auch nichts. Außerdem suche ich anscheinend mit den falschen suchwörtern nach einer Lösung meines Problemes.
Grüße
Jeena Paradies
Hi,
Gib halt nicht die gesamte URL als klickbaren Text an, sondern nur die ersten 30 Zeichen oder so (ggf. noch mit ...)
Könntest du mit eventuell eine Seite zeigen aus welcher ich lernen kann damit umzugehen? Ich kapiere von der Funktion nichts. Und beschrieben ist auch nichts. Außerdem suche ich anscheinend mit den falschen suchwörtern nach einer Lösung meines Problemes.
Deine jetzige Funktion:
function replace_uri($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
}
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
Dazwischen (zwischen den beiden ##) kommen die verschiedenen Teile (geklammert):
1: (^|[^"=]{1})
Stringanfang oder ein von " und = verschiedenes Zeichen
2: (http://|ftp://|mailto:|news:)
Das Protokoll der URL (das würde ich noch um https:// ergänzen zu (http://|ftp://|mailto:|news:|https://)
3: ([^\s<>]+)
beliebig viele Zeichen, die aber weder Space noch < noch > sind - die URL mit Ausnahme des Protokolls
4: ([\s\n<>]|$)
ein Space oder Zeilenende oder < oder > oder das Stringende.
Diese durchnumerierten Teile werden beim replace wieder eingesetzt, siehe die \ gefolgt von Nummern (der doppelte \ ist notwendig, weil ein \ ja von PHP als Escape-Zeichen verwendet wird).
Du willst jetzt den 3. Teil in 2 Teile aufspalten: zuerst bis zu 30 Zeichen, die Du für den klickbaren Text benutzt, danach der Rest der URL.
Da das ein Teil mehr ist, bekommt der bisherige Teil 4 die neue Nummer 5
3 neu: ([^\s<>]{1,30})
maximal 30 Zeichen der URL
4 neu: ([^\s<>]*)
die restlichen Zeichen der URL, falls vorhanden
5 neu = 4 alt: ([\s\n<>]|$)
ein Space oder Zeilenende oder < oder > oder das Stringende.
Zusammengesetzt also
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
In der replace-Anweisung
return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
muß natürlich jetzt berücksichtigt werden, daß der alte Teil 3 aufgesplittet wurde und der bisherige 4. Teil jetzt Teil 5 ist.
return preg_replace($pattern,"\1<a href="\2\3\4"><u>\2\3...</u></a>\5",$str);
Im href müssen jetzt die Teile 2, 3 und 4 stehen, denn diese bilden die URL.
Im Link drin stehen die Teile 2 (Protokoll) und 3 (erste 30 Zeichen der URL) sowie 3 Punkte (die erscheinen immer, auch wenn die URL kürzer ist - kannst Du auch einfach weglassen - da fällt mir im Moment keine Möglichkeit ein, die nur dann einzubinden, wenn Teil 4 nichtleer ist)
Nach dem Link steht jetzt Teil 5 statt Teil 4 (weil durch die Aufteilung der URL sich die Numerierung verschiebt.
Ich würde dann noch das u-Element rausschmeißen - dafür gibt es ja CSS, um den Link zu unterstreichen:
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);
cu,
Andreas
Hallo,
vielen Dank für deine Ausführliche Erklärung. Damit und mit dem Link von AllesMeins (http://www.dclp-faq.de/q/q-regexp-bauelemente.html) fällt es mir jetzt nicht mehr so schweer das kryptische zu entziffern. Zwar funktioniert es noch nicht, es wird gar kein Link eingesetzt aber dass müsste ja dann auch noch hinzubekommen sein. Das einzige was ich noch nicht ganz kapiere und irgendwie denke dass es daran liegt ist das:
4 neu: ([^\s<>]*)
die restlichen Zeichen der URL, falls vorhanden
Woher weiß der ab wo er weiter suchen muss?
Versthe ich das dann auch richtig dass bei
preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);
der Rest des Links überhaupt nicht mehr angezeigt wird? Das mit den Pünktchen könnte ich ja vorher abfragen ob es mehr als 30 Zeichen sind und dann per if in einen String entweder "..." oder "" reinschreiben. Diesen könnte ich dann einsetzen und wenn es länger ist dann werden die Punkte angefügt wenn kürzer nicht.
Jetzt fehlt mir aber noch dass es funktioniert.
Grüße
Jeena Paradies
Hallo,
Warum will die Funktion nicht arbeiten?
function rewrite_url($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);
}
Grüße
Jeena Paradies
Hi,
Warum will die Funktion nicht arbeiten?
Soll das die Fehlerbeschreibung sein?
Was ist die Eingabe, was ist die Ausgabe?
Oder wirft der Interpreter ne Fehlermeldung? Wenn ja, welche?
function rewrite_url($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);
}
cu,
Andreas
Hallo,
Soll das die Fehlerbeschreibung sein?
Sorry werde ich in Zukunft besser machen.
Was ist die Eingabe, was ist die Ausgabe?
Oder wirft der Interpreter ne Fehlermeldung? Wenn ja, welche?
Keine Fehlermeldung. Es wird einfach kein Link außenrum eingefügt.
Eine Seite mit der neuen Funktion
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/index.php#13
Die gleiche Seite mit der alten Funktion:
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/kommentar.php#13
Grüße
Jeena Paradies
Hi,
function rewrite_url($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
Der Teil nach der {1,30} stimmt nicht, da müssen ja für den Fall, daß die URL länger ist, nochmal die gleichen Zeichen gesucht werden wie bei den ersten 30:
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([^\s<>]*)([\s\n<>]|$)#sm';
cu,
Andreas
Hallo,
Der Teil nach der {1,30} stimmt nicht, da müssen ja für den Fall, daß die URL länger ist, nochmal die gleichen Zeichen gesucht werden wie bei den ersten 30:
Es funktioniert zwar jetzt sehr gut, aber warum das kapiere ich noch nicht. Aber vieleicht wenn ich mich noch einwenig mehr damit befasst habe.
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([^\s<>]*)([\s\n<>]|$)#sm';
Vielen Dank für deine Mühe.
Grüße
Jeena Paradies
aloha heja he
Wie kriege ich es hin dass zu lange Links auch im Mozilla umgebrochen werden und nicht über den Rand gehen?
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/
// URI anklickbar machen
function replace_uri($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
}
Leider habe ich keine Ahnung wie ich da ein <br /> oder so was reibringe, was auch ein wenig blöd wäre denn die Textgröße kann ich ja nicht herausfinden wenn jemand auf 200% vergrößert ist ja weniger Platz da also müsste ich schon vorcher umbrechen wen jemand auf 75% stellt dann müsste es später abbrechen. Es müsste also irgendwie per css geschehen aber ich finde keine Lösung.
Eine Loesung wirst Du bei Vergroesserung nicht finden. Ich wuerde fuer die Anzeige nicht die komplette URL nehmen, sondern einen verkuerzten String.
Achja, ein unschoener Effekt bei Artikel/webdesign am Ende
Warning: main(../../scripte/kommentar.php): failed to open stream: No such file or directory in /home/jeena/Webs/jeenas-home5/artikel/webdesign/index.php on line 257
Warning: main(): Failed opening '../../scripte/kommentar.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/jeena/Webs/jeenas-home5/artikel/webdesign/index.php on line 257
man liest sich
Wilhelm
Hallo,
Eine Loesung wirst Du bei Vergroesserung nicht finden. Ich wuerde fuer die Anzeige nicht die komplette URL nehmen, sondern einen verkuerzten String.
Und wenn dann wohl nur mit extrem JavaScript was ich überhaupt nicht kenne. Irgendwie komme ich aber mit der
function replace_uri($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
}
überhaupt nicht zurecht. Für mich sind das noch Hieroglyphen und ich verstehe überhaupt nicht was ich da ändern muss.
Achja, ein unschoener Effekt bei Artikel/webdesign am Ende
Vielen Dank das weiß ich schon da dort auch - wenn ich die Kommentarfunktion fertig Programmiert habe - diese hinkommt. Noch ist eine andere drin die jetzt nicht mehr funktioniert.
Grüße
Jeena Paradies
Hiho,
Und wenn dann wohl nur mit extrem JavaScript was ich überhaupt nicht kenne.
Nein, mit einer serverseitigen Sprache wie z.b. PHP.
Irgendwie komme ich aber mit der
function replace_uri($str) {
$pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
}
überhaupt nicht zurecht. Für mich sind das noch Hieroglyphen und ich verstehe überhaupt nicht was ich da ändern muss.
Das ist ein Suchmuster. Im allgemeinen sucht der nur nach etwas das mit http://, ftp://, mailto: oder news: anfängt und ersetzte das ganze durch ein <A HREF="ADRESSE"><u>ADRESSE</u></A>. Wie genau ds abläuft ist hier 1 ganz gut erklärt.
Versuch das mal zu lernen, dann solltest du es auch hin bekommen den Kram beim Ersetzten durch eine zusätzliche Funktion zu jagen, die den Link auf z.b. 20Zeichen kürzt und ein ... dranhängt.
Grüsse
Marc
Hallo,
Nein, mit einer serverseitigen Sprache wie z.b. PHP.
Ich bezog mich dabei auf die Schriftvergrößerung im Browser.
Vielen Dank für den Link, der bringt mich schon viel weiter. Zusammen mit MudGuards erklärungen werde ich jetzt hoffentlich dahinter kommen so dass ich dann öfters suchen und ersetzen benutzen kann.
Grüße
Jeena Paradies