2008-12-04 7 views
9

Das sollte einfach sein, aber ich bin mir nicht sicher, wie ich das am besten anstellen soll. Ich habe eine WinForms-App, mit der der Benutzer lange Beschreibungen eingeben kann. Gelegentlich würden sie URLs eingeben und die RichTextBox würde sie erkennen und sie anklickbar machen, wenn sie angezeigt werden.URL im Klartext erkennen

Ich verschiebe die App ins Web und bin mir nicht sicher, wie diese URLs anklickbar gemacht werden können. Gibt es eine halbautomatische Möglichkeit, "http://www.google.com" oder "www.google.com" in klickbare Links umzuwandeln? Muss ich auf RegEx-Abgleich zurückgreifen?

Antwort

13

Es ist eigentlich ein sehr schwieriges Problem. Sie können mit regulären Ausdrücken nah, aber nicht perfekt sein. Es ist eine sehr schöne Aufteilung der potenziellen regex Muster hier zu berücksichtigen: http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/

Der letzte zählt er scheint, wie es für die meisten Zwecke wahrscheinlich gut genug:

\b(?:(?:https?|ftp|file)://|www\.|ftp\.) 
    (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])* 
    (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$]) 
3

Vorsicht. Wenn die klickbaren URLs, die Ihre Nutzer generieren, für andere Nutzer sichtbar sind, führen Sie neue Probleme mit Cross-Site-Scripting-Angriffen und ähnlichem ein. Außerdem müssen Sie möglicherweise URLs bereinigen. In der URL könnte beispielsweise ein kaufmännisches Und-Zeichen enthalten sein, aber Sie müssen es umgehen.

Also, es gibt eigentlich zwei Schritte. 1. Suchen Sie die URL. 2. Machen Sie die URL anklickbar.

Schritt 2 ist wahrscheinlich schwieriger.

Auch vorsichtig sein, Dinge wie Klammern und dergleichen. Einige Benutzer verwenden ihre URLs gerne in einem Satz, den sie dann in einem Zeitraum beenden. Z.B. Ich mag http://www.pie.com.It ist gut. Eine der besten Möglichkeiten, dieses Problem zu lösen, besteht darin, die URL so zu erstellen, wie sie der Benutzer eingibt. Wenn etwas schief geht, können sie es vor dem Senden sagen.

+0

Glücklicherweise ist dies nur für interne Referenzdaten, so dass Angriffe kein großes Problem darstellen. Die URLs befinden sich bereits im Text, daher ist es nicht möglich, sie bei der Eingabe zu adressieren (obwohl es eine gute Alternative gewesen wäre). – gfrizzle

Verwandte Themen