Calocybe: split Problem beim Auslesen von .txt Datenbanken

Beitrag lesen

Moin!

wie weiße ich das Script an den Doppelpunkt in der URL zu übergehen, also keinen split durchzuführen?

Koennte mit einem *sehr* komplizierten regulaeren split-Ausdruck moeglich sein, besser waere aber:

Ist es vielleicht möglich diesen Doppelpunkt als anderes Zeichen zu tarnen und dann später im HTML Template wieder in einen Doppelpunkt umzuwandeln?

Eben dies. Beim Schreiben in die DB musst Du jeden Wert auf das :-Zeichen pruefen und dieses verschluesseln. Es kommt dann in den Werten selbst also nicht mehr vor. Als Verschluesselung bietet sich z.B. ein abgewandeltes URL-Encoding an, d.h. der Doppelpunkt wird durch %3A ersetzt (%-Zeichen gefolgt vom hexadezimalen ASCII-Code des Doppelpunkts). Da somit auch % eine Sonderbedeutung erhaelt, muss dieses ebenfalls codiert werden, am besten mit %25. Und das geht in Perl, indem Du auf *jeden* Wert, den Du in die DB schreibst, diesen regexp anwendest:

s/([%:])/sprintf("%%%02X", ord($1))/eg;

Dann steht in Deiner DB etwa

wert1:http%3A//www.url.de:wert3:etc...
    
Beim Auslesen machst Du die Codierung rueckgaengig, wie es bei jeder Docodierung von URL-encoded strings in CGI scripts getan wird, naemlich durch Anwenden von

s/%([0-9A-Fa-f]{2})/chr(hex($1))/ge;
    
auf *jeden* der ausgelesenen Werte.

Ich weis das es nicht besonders sinnig ist Doppelpunkte als splits zu verwenden, aber andere Zeichen wie "&", "§", "%", kommen noch häufiger in der DB vor... und da diese DB schon gut 100 zeilen Inhalt umfasst, wäre es zu viel arbeit die splits jetzt noch zu ändern.

Das macht ein Perl-Script von einer Zeile Umfang!

So long, Calocybe