Hi psycho,
lassen wir das praktische Problem erst mal weg und versuchen es in der Theorie:
Du hast folgenden String:
$l[google.de?search=[foo]bar]suche nach [Foo]bar!$l
Für einen Menschen ist das ganze so weit klar, dass "google.de?search=[foo]bar" die URI und "suche nach [Foo]bar!" die Beschriftung ist.
Und zwar ist uns das klar weil es - unüblich - wäre eine Bezeichnung "bar]suche nach [Foo]bar!" zu benennen. Rein logisch aber durchaus völlig korrekt. Wir als Menschen erkennen also wie das richtig aussehen muss, nur aus reiner Gewohnheitssache weil es unsere Sprache so vorschreibt und wir es nicht anders kennen.
Folglich bleiben dir zwei Möglichkeiten:
Ein mal kannst du dem PC beibringen in gewisser Weise logisch zu denken und solche Sachen selbstständig entscheiden zu können. Problem an der Sache ist der gewaltige Programmieraufwand und dass diese Problemlösung am Ziel vorbeischießen würde. Also weg mit der Idee.
Andere Möglichkeit: Die Syntax ändern. Wenn rein logisch zwei gleichwertige Möglichkeiten bestehen eine Sache zu lösen, musst du so lange an den vorraussetzungen herumschrauben bis nur noch eine eindeutige Lösungsmöglichkeit besteht.
Also den User nicht erlauben [ und ] zu benutzen in URIs, bzw. diese bereits im geschriebenen Code durch %5B und %5D ersetzen.
Wie dem auch sei... So wie du es wünschst geht es technisch und logisch nicht. Egal wie lang du rumschraubst.
Schade eigentlich.
Das SELFHTML Forum welches ich technisch als eines der einwandfreisten bezeichnen würde hat für dieses Phänomen eine Lösung. Links in denen unkodiert ein [ vorkommt werden nicht geparsed. Kommt ein ] vor wird der Link an dieser Stelle beendet. Ganz einfach.
Gruß,
Pablo