Fehler bei Posten eines Links mit einer Klammer am Ende

    • Offizieller Beitrag

    Die automatische Erkennung von URLs hat seine Grenzen, dies führt unter anderem dazu dass die schließende Klammer nicht mehr korrekt erkannt werden kann. Das Problem ist hierbei, dass der Parser nur raten kann, an welcher Stelle die URL endet und ab welcher Position es sich um Inhalt aus dem eigentlichen Beitrag handelt.

    Der gegenwärtig genutzte Algorithmus kam schon in Burning Board 3 zum Einsatz und erkennt nahezu alle URLs, führt gleichzeitig aber zu wenigen bis keinen fehlerhaften Erkennungen (so genannte false positives).

  • Der Parser kann unmöglich wissen, dass die Klammer zur URL gehören soll.

    Nimm mal folgendes beispiel:

    "Katzen haben Fell (siehe http://de.wikipedia.org/wiki/Katzen), dieses muss man bürsten". Da gehört die Klammer definitiv nicht zur URL. Da der Parser keine semantische Auswertung machen kann gibt es eben einige Grenzfälle, in denen du zwar weißt, was du meinst, aber der Parser dies unmöglich erkennen kann. In solchen Fällen musst du ihm ein wenig nachhelfen, hier indem du den entsprechenden BBCode benutzt und den Link damit umschließt.

    "A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP" — Leonard Nimoy

  • Was ist denn, wenn die Klammern durch ( und ) ersetzt werden? Könnte dann der Parser das nicht erkennen? Tut er nämlich nicht.

    EDIT: Ich wollte Prozent 28 und Prozent 29 schreiben...

    EDIT 2: Alles mit Prozent und einer Zahl wird durch das jeweilige Zeichen ersetzt. Auch im Code- und im TT-BBCode. Muss das so?

    Wenn ich jetzt in einem HTML-Programmierforum jemandem die Entsprechung für ein Leerzeichen in einer URL mitteilen will, so geht das nicht.

  • Ich möchte das Thema nochmal hochholen, weil ich es nicht verstehe, dass dieses Problem noch immer nicht behoben ist. Das betrifft Links großer Websites wie Wikipedia (aber nicht nur!) und andere Forensoftwares bekommen das ja auch problemlos hin, Beispiel phpbb.

    Wieso sollte man nicht erkennen, ob eine schließende Klammer zur URL gehört oder nicht? Vor einer schließenden Klammer gibt es auch eine öffnende Klammer und wenn zwischen http(s):// und der öffnenden Klammer kein Leerzeichen existiert, dann weiß man, dass die öffnende Klammer zur URL gehört, und dann weiß man auch, dass die schließende Klammer zur URL gehört. Die schließende Klammer würde dann nicht zur URL gehören, wenn die öffnende Klammer vor dem http(s):// erscheint.

    Die Begründung wäre dann akzeptabel, wenn andere Softwares das auch nicht schaffen würden. Das ist aber nachweislich nicht der Fall. Den Fehler fünf Jahre später noch immer nicht gelöst zu haben, ist für mich unverständlich, da wir hier von absoluter Basis-Funktionalität eines CMS und Forums sprechen, nämlich dem Setzen von Links. Könnte man sich das bitte nochmal ansehen?

  • Code
    Lorem ipsum dolor sit amet (https://www.google.com/), consetetur sadipscing elitr, sed (https://www.google.com/ ) diam nonumy eirmod tempor ( https://www.google.com/) invidunt ut labore et dolore magna aliquyam erat ( https://www.google.com/ ), sed diam voluptua (https://www.google.com/). (At vero eos et accusam et justo duo dolores et ea rebum https://www.google.com/).

    Nur mal so als Beispiel. Viele sind ja schon zu blöd dazu Leerzeichen in Word etc. nicht zu unterstreichen/verlinken, geschweige denn das Leerzeichen am Anfang und am Ende gleich zu setzen.

  • All diese Beispiele liesen sich beheben, wenn wie vorgeschlagen geschaut wird, ob im Link selbst eine öffnende klammer vorhanden ist.

    Ja, das bedeutet etwas mehr logik die daran beteiligt wäre, aber am Ende sollte bei einer entsprechenden Umsetzung die false positives relativ gering sein und dafür dir false negatives, die derzeit sehr oft zu Problemen führe, größtenteils verschwinden,

  • Btw, ich hab mal geschaut wie wordpress das am Ende löst, finde ich sogar weniger kompliziert als die aktuelle Lösung und liefert alle Links zurück wie erwartet:

    Code
    Lorem ipsum dolor sit amet (https://www.google.com/), https://www.google.com/test(abc) consetetur sadipscing elitr, sed (https://www.google.com/ ) diam nonumy eirmod tempor ( https://www.google.com/) invidunt ut labore et dolore magna aliquyam erat ( https://www.google.com/ ), sed diam voluptua (https://www.google.com/). (At vero eos et accusam et justo duo dolores et ea rebum https://www.google.com/).

    Hier würde man erwarten dass nur der zweite Link erfasst wird, die wordpress funktion schafft das:

    Code
    function make_clickable($text) {
        $regex = '#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#';
        return preg_replace_callback($regex, function ($matches) {
            return "<a href=\'{$matches[0]}\'>{$matches[0]}</a>";
        }, $text);
    }

    liefert dann folgendes zurück:

    Code
    Lorem ipsum dolor sit amet (<a href=\'https://www.google.com/\'>https://www.google.com/</a>), <a href=\'https://www.google.com/test(abc)\'>https://www.google.com/test(abc)</a> consetetur sadipscing elitr, sed (<a href=\'https://www.google.com/\'>https://www.google.com/</a> ) diam nonumy eirmod tempor ( <a href=\'https://www.google.com/\'>https://www.google.com/</a>) invidunt ut labore et dolore magna aliquyam erat ( <a href=\'https://www.google.com/\'>https://www.google.com/</a> ), sed diam voluptua (<a href=\'https://www.google.com/\'>https://www.google.com/</a>). (At vero eos et accusam et justo duo dolores et ea rebum <a href=\'https://www.google.com/\'>https://www.google.com/</a>).

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!