Schrift
[thread]8868[/thread]

Perl Regular Expression - merkwürdiges Verhalten



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
GoodFella
 2007-03-24 00:04
#75303 #75303
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Gerade war perl-community down, da hab ich den Beitrag auf Buha erstellt, jetzt gehts plötzlich wieder...grrr.. Auf Buha bekommt man was Perl betrifft selten Hilfe, deswegen der Post jetzt doch hier. Hoffe Crossposting ist in diesem Fall in Ordnung für euch. Geht um http://www.buha.info/board/showthread.php?t=53582

Inhalt:





Ich bin jetzt seit 4 Stunden am Debuggen, erfolglos. Sicher, ich könnte einen Workaround coden, aber dann wäre ich mir mit allen benutzten Regexes des Scriptes unsicher. So kann man nicht produktiv coden. Ich suche eine Erklärung für folgendes Verhalten; Weiterer Code ist nicht nötig aufgrund der Logik des ganzen, ausserdem ist das betroffene Script 3600 Zeilen lang.


Code: (dl )
1
2
3
4
              &debug('CHECK 1 MANUALLY: "'.($sex_cmp =~ /^\s*$male_cmp\s*$/si).'"');
             &debug('CHECK 2 MANUALLY: "'.($sex_cmp =~ /^\s*$male_cmp\s*$/sgi).'"');
             &debug('CHECK 3 MANUALLY: "'.(lc($sex_cmp) eq lc($male_cmp)).'"');
             &debug('CHECK 4 MANUALLY: "'.($sex_cmp =~ /$male_cmp/si).'"');



ergibt (&debug appended eine Lodatei)

Quote
CHECK 1 MANUALLY: ""
CHECK 2 MANUALLY: ""
CHECK 3 MANUALLY: "1"
CHECK 4 MANUALLY: "1"


Nimmt man nur mal:

Check 1: Suche nach von anfang an kein oder mehrere Whitespaces, dann den string, dann wieder kein oder mehrere Whitespaces dann Ende. Ignoriere CASE und suche im Gesamtstring.

und

Check 4: Suche den String. Ignoriere CASE und suche im Gesamtstring.

..Wenn der String genau derselbe ist, und das ist er siehe Check 3, dann sind die beiden Regexes identisch und sollten beide zu 1 evaluieren. Tun sie leider nicht.

Ich habe  ein Testscript geschrieben, um das ganze isoliert zu testen; da werden alle Tests zu 1.
Aufgrund der Logik des ganzen _KANN_ das aber gar nicht vom restlichen Script abhängen, also was läuft hier falsch? So ein unvorhersagbares Verhalten kenne ich nur aus alten Pascal-Tagen, hab jetzt echt Angst bekommen. (Deadline dafür ist nächsten Montag, das macht es noch angsteinflössender)

[edit] Den Topictitel kann man wohl nicht nachträglich verbessern, oder?\n\n

<!--EDIT|GoodFella|1174687637-->
PerlProfi
 2007-03-24 10:20
#75304 #75304
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Lass dir doch vor und nach den Tests auch mal $sex_cmp und $male_cmp in die Logdatei schreiben.

MfG
kristian
 2007-03-24 10:23
#75305 #75305
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Ich würde mir in dem Falle die Inhalte von $sex_cmp und $male_cmp ausgeben lassen.
Ich denke da steht etwas drinn, das du nicht erwartest und dementsprechend in deinem Testscript nicht berücksichtigt hast.
Meine Glaskugel spricht von LineBreaks.

Gruss
Kristian

EDIT: Hmmmpf, zu langsam....\n\n

<!--EDIT|kristian|1174724699-->
Relais
 2007-03-24 12:13
#75306 #75306
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=GoodFella,23.03.2007, 23:04][edit] Den Topictitel kann man wohl nicht nachträglich verbessern, oder?[/quote]
Die Moderatoren können das.

Zum Thema: Innerhalb einer Regex haben manche Zeichen besondere Bewandnis, dashalb ist ein Vergleich

$string =~ /$in_der_regex/

nicht mit

$string eq $in_der_regex

vergleichbar. Du gehst fälschlicherweise davon aus, daß das so wäre. Näher an das Ergebnis kommst Du, wenn Du um den prüfstring Quotes setzt, also so:

$string =~ /\Q$in_der_regex\E/
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
GoodFella
 2007-03-24 15:35
#75307 #75307
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
@Perlprofi & kristian: Genau das habe ich in den 4 Stunden vorher getan, dachte mir, ihr glaubt mir vielleicht, dass es daran nicht liegen kann; hier jetzt der vollständige Codepart dazu:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
               
      #Geschlechtsidentifikations-R
            $assigned_col = (defined($excel_assign{"$eo,$sheet"}[$ba_config{'sex_col'}])) ? ($excel_assign{"$eo,$sheet"}[$ba_config{'sex_col'}]) : ($ba_config{'sex_col'});
            $sex_cmp = $current_sheet->{Cells}->[$row]->[$assigned_col]->{Val};
            $sex_r = $none;
          
            &debug("\n\nba_config{'sex_col'} = $ba_config{'sex_col'}, sex_cmp = $sex_cmp, ba_config{'sex_m'} = $ba_config{'sex_m'}, ba_config{'sex_w'} = $ba_config{'sex_w'}");

            foreach my $male_cmp (split(/,/,$ba_config{'sex_m'}))
             {
              my $test_chr = '';
              $test_chr .= "$_ = ".ord($_).', ' for(split(//,$male_cmp)); $test_chr .= " <-------->;;;;; ";
              $test_chr .= "$_ = ".ord($_).', ' for(split(//,$sex_cmp));
              &debug
($test_chr);
              &debug
("('sex_cmp' =~ 'male_cmp') -->;;;;; ('$sex_cmp' =~ '$male_cmp')");
              &debug
('CHECK 1 MANUALLY: "'.($sex_cmp =~ /^\s*$male_cmp\s*$/si).'"');
              &debug
('CHECK 2 MANUALLY: "'.($sex_cmp =~ /^\s*$male_cmp\s*$/sgi).'"');
              &debug
('CHECK 3 MANUALLY: "'.($sex_cmp eq $male_cmp).'"');
              &debug
('CHECK 4 MANUALLY: "'.($sex_cmp =~ /$male_cmp/si).'"');

              if($ba_config{'case_m'} == 1) { &debug('INNERHALB (case_m == 1), '."male_cmp = $male_cmp, sex_cmp = $sex_cmp"); $sex_r = 'r' if ($sex_cmp =~ /^\s*$male_cmp\s*$/s);  &debug("sex_r = $sex_r"); }
              else               
           { &debug('INNERHALB (case_m == 0), '."male_cmp = $male_cmp, sex_cmp = $sex_cmp"); $sex_r = 'r' if ($sex_cmp =~ /^\s*$male_cmp\s*$/si); &debug("sex_r = $sex_r"); }
              last if($sex_r ne $none);
             }

            &debug("sex_r = $sex_r");

            foreach my $female_cmp (split(/,/,$ba_config{'sex_w'}))
             {

              my $test_chr = '';
              $test_chr .= "$_ = ".ord($_).', ' for(split(//,$female_cmp)); $test_chr .= " <-------->;;;;; ";
              $test_chr .= "$_ = ".ord($_).', ' for(split(//,$sex_cmp));
              &debug
($test_chr);
              &debug
("('sex_cmp' =~ 'female_cmp') -->;;;;; ('$sex_cmp' =~ '$female_cmp')");
              &debug
('CHECK 1 MANUALLY: "'.($sex_cmp =~ /^\s*$female_cmp\s*$/si).'"');
              &debug
('CHECK 2 MANUALLY: "'.($sex_cmp =~ /^\s*$female_cmp\s*$/sgi).'"');
              &debug
('CHECK 3 MANUALLY: "'.($sex_cmp eq $female_cmp).'"');
              &debug
('CHECK 4 MANUALLY: "'.($sex_cmp =~ /$female_cmp/si).'"');

              if($ba_config{'case_w'} == 1) { &debug('INNERHALB (case_w == 1), '."female_cmp = $female_cmp, sex_cmp = $sex_cmp"); $sex_r = '' if ($sex_cmp =~ /^\s*$female_cmp\s*$/s);  &debug("sex_r = $sex_r"); }
              else               
           { &debug('INNERHALB (case_w == 0), '."female_cmp = $female_cmp, sex_cmp = $sex_cmp"); $sex_r = '' if ($sex_cmp =~ /^\s*$female_cmp\s*$/si); &debug("sex_r = $sex_r"); }
              last if($sex_r ne $none);
             }

            &debug("sex_r = $sex_r");


ergibt (vorher lass ich mir noch %ba_config ausgeben, ich paste das einfach mal mit)


Quote
anrede_col = 0
anrede_replace = 1
anrede_vorsatz = Sehr geehrte
case_m = 0
case_w = 0
nachname_col = 3
name_vorsatz_col = 7
reduce_whitespaces = 1
remove_n = 0
sex_col = 0
sex_m = Herr,Herrn
sex_w = Frau
status = 1
titel_add = 1
titel_col = 7
titel_search_anrede = 1
titel_search_name = 1
titel_search_prename = 1
vorname_col = 2
zusatz_add = 1
zusatz_search_anrede = 1
zusatz_search_name = 1
zusatz_search_prename = 1





ba_config{'sex_col'} = 0, sex_cmp = Herr, ba_config{'sex_m'} = Herr,Herrn, ba_config{'sex_w'} = Frau
H = 72, e = 101, r = 114, r = 114,  <--------> H = 72, e = 101, r = 114, r = 114,
('sex_cmp' =~ 'male_cmp') --> ('Herr' =~ 'Herr')
CHECK 1 MANUALLY: ""
CHECK 2 MANUALLY: ""
CHECK 3 MANUALLY: "1"
CHECK 4 MANUALLY: "1"
INNERHALB (case_m == 0), male_cmp = Herr, sex_cmp = Herr
sex_r = none
H = 72, e = 101, r = 114, r = 114, n = 110,  <--------> H = 72, e = 101, r = 114, r = 114,
('sex_cmp' =~ 'male_cmp') --> ('Herr' =~ 'Herrn')
CHECK 1 MANUALLY: ""
CHECK 2 MANUALLY: ""
CHECK 3 MANUALLY: ""
CHECK 4 MANUALLY: ""
INNERHALB (case_m == 0), male_cmp = Herrn, sex_cmp = Herr
sex_r = none
sex_r = none
F = 70, r = 114, a = 97, u = 117,  <--------> H = 72, e = 101, r = 114, r = 114,
('sex_cmp' =~ 'female_cmp') --> ('Herr' =~ 'Frau')
CHECK 1 MANUALLY: ""
CHECK 2 MANUALLY: ""
CHECK 3 MANUALLY: ""
CHECK 4 MANUALLY: ""
INNERHALB (case_w == 0), female_cmp = Frau, sex_cmp = Herr
sex_r = none
sex_r = none


.. hiervon jetzt sehr viel, hier mal etwas, wo sex_cmp weiblich ist:


ba_config{'sex_col'} = 0, sex_cmp = Frau, ba_config{'sex_m'} = Herr,Herrn, ba_config{'sex_w'} = Frau
H = 72, e = 101, r = 114, r = 114,  <--------> F = 70, r = 114, a = 97, u = 117,
('sex_cmp' =~ 'male_cmp') --> ('Frau' =~ 'Herr')
CHECK 1 MANUALLY: ""
CHECK 2 MANUALLY: ""
CHECK 3 MANUALLY: ""
CHECK 4 MANUALLY: ""
INNERHALB (case_m == 0), male_cmp = Herr, sex_cmp = Frau
sex_r = none
H = 72, e = 101, r = 114, r = 114, n = 110,  <--------> F = 70, r = 114, a = 97, u = 117,
('sex_cmp' =~ 'male_cmp') --> ('Frau' =~ 'Herrn')
CHECK 1 MANUALLY: ""
CHECK 2 MANUALLY: ""
CHECK 3 MANUALLY: ""
CHECK 4 MANUALLY: ""
INNERHALB (case_m == 0), male_cmp = Herrn, sex_cmp = Frau
sex_r = none
sex_r = none
F = 70, r = 114, a = 97, u = 117,  <--------> F = 70, r = 114, a = 97, u = 117,
('sex_cmp' =~ 'female_cmp') --> ('Frau' =~ 'Frau')
CHECK 1 MANUALLY: ""
CHECK 2 MANUALLY: ""
CHECK 3 MANUALLY: "1"
CHECK 4 MANUALLY: "1"
INNERHALB (case_w == 0), female_cmp = Frau, sex_cmp = Frau
sex_r = none
sex_r = none


Man sieht, die zu vergleichenden Wörter sind absolut INDENTISCH. Sonst hätte ich hier auch gar nicht gepostet ;)


@Relais: Zeichen, die für eine Regex von Bedeutung sind, können eigentlich gar nicht in den Daten vorkommen, die ich benutze, werde jetzt aber trotzdem mal einen Test mit Deinem Vorschlag machen.
[EDIT]: Wie erwartet macht \Q und \E keinen Unterschied, schliesslich sind in meinen Testdaten keine Metazeichen enthalten.
ALLERDINGS: Ich habe mal zum Spass folgendes eingebaut:

Code (perl): (dl )
1
2
utf8::downgrade($male_cmp);
utf8::downgrade($sex_cmp);


So funktioniert es wie erwartet!!! Darüber kann ich mich jetzt aber überhaupt nicht freuen, dass heisst ja, dass ich jetzt vor JEDES Regex immer die beiden Codeparts schreiben muss. Das muss doch auch anders gehen. Warum ist das überhaupt so, ich hatte jahrelang niemals Probleme damit.
Weiss jemand eine Lösung? Die Daten kommen übrigens von Spreadsheet::ParseExcel + einem Tk::Entry.\n\n

<!--EDIT|GoodFella|1174744068-->
kristian
 2007-03-24 20:31
#75308 #75308
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Quote
Warum ist das überhaupt so, ich hatte jahrelang niemals Probleme damit.
Weiss jemand eine Lösung?


Ich kriegs nicht mehr zusammen.
Der Grund ist Unicode bzw. die Umstellung auf und Unterstützung von Unicode.
Irgendwo in der Doku eines der Module, frag mich bitte nicht, das ist so lange her das ichs gelesen habe, steht - da bin ich sicher - das es geschehen kanns das zwei Strings die gleich aussehen in einer Regex nicht gleich sind.
Gesetzte HiBits oder was auch immer, ich hoffe einer der echten Profis hier erinnert das besser.

Gruss
Kristian
GoodFella
 2007-03-24 21:16
#75309 #75309
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=kristian,24.03.2007, 19:31]Hallo

Quote
Warum ist das überhaupt so, ich hatte jahrelang niemals Probleme damit.
Weiss jemand eine Lösung?


Ich kriegs nicht mehr zusammen.
Der Grund ist Unicode bzw. die Umstellung auf und Unterstützung von Unicode.
Irgendwo in der Doku eines der Module, frag mich bitte nicht, das ist so lange her das ichs gelesen habe, steht - da bin ich sicher - das es geschehen kanns das zwei Strings die gleich aussehen in einer Regex nicht gleich sind.
Gesetzte HiBits oder was auch immer, ich hoffe einer der echten Profis hier erinnert das besser.

Gruss
Kristian[/quote]
Dann sollte es aber einen switch geben, der dieses Verhalten abstellen kann.. hoffe ich :(

Hab mir mal perdoc utf8 angeschaut.. zuerst no utf8; getestet -> kein Effekt. Dann mal das probiert:

Code (perl): (dl )
&debug('is_utf8(male_cmp) = '.utf8::is_utf8($male_cmp).', is_utf8(sex_cmp) = '.utf8::is_utf8($sex_cmp));


output:

Quote
is_utf8(male_cmp) = 1, is_utf8(sex_cmp) =


Am liebsten wär mir eine Zeile am Anfang des Scriptes, die bewirkt, dass jegliche verwendeten Variableninhalte, wenn nicht schon so vorhanden, utf8::down-ge-grade-ded werden :)

[EDIT]
use utf8 geht bei mir gar nicht, Fehlermeldung:

Quote
---------- Perl ----------
Malformed UTF-8 character (unexpected continuation byte 0xa7, with no preceding start byte) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0xe4, immediately after start byte 0xfc) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0xf6, immediately after start byte 0xe4) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0x5c, immediately after start byte 0xf6) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected continuation byte 0xb5, with no preceding start byte) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected continuation byte 0x80, with no preceding start byte) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected continuation byte 0xb4, with no preceding start byte) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0x20, immediately after start byte 0xdf) at mmc.pl line 709, <DATA> line 164.
Malformed UTF-8 character (unexpected continuation byte 0xa7, with no preceding start byte) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0xe4, immediately after start byte 0xfc) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0xf6, immediately after start byte 0xe4) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0xdc, immediately after start byte 0xf6) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0xc4, immediately after start byte 0xdc) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0xd6, immediately after start byte 0xc4) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0x5c, immediately after start byte 0xd6) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected continuation byte 0xb5, with no preceding start byte) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected continuation byte 0x80, with no preceding start byte) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected continuation byte 0xb4, with no preceding start byte) at mmc.pl line 2809, <DATA> line 164.
Malformed UTF-8 character (unexpected non-continuation byte 0x20, immediately after start byte 0xdf) at mmc.pl line 2809, <DATA> line 164.
@ 535 not utf8
SV = PV(0x3c3e880) at 0x2d14630
 REFCNT = 1
 FLAGS = (POK,pPOK,UTF8)
 PV = 0x3c56ffc "Hinzuf\374gen"\0Could not open Y:\Pete\Perl\Projekte\mmComplete\error_log.txt! at mmc.pl line 504, <DATA> line 164.
[UTF8 "Hinzuf\x{2796e005}"]
 CUR = 10
 LEN = 12
SV = PVMG(0x3c5733c) at 0x2d14630
 REFCNT = 1
 FLAGS = (SMG,POK,pPOK,UTF8)
 IV = 0
 NV = 0
 PV = 0x3c56ffc "Hinzuf\374gen"\0 [UTF8 "Hinzuf\x{2796e005}"]
 CUR = 10
 LEN = 12
 MAGIC = 0x3c58f24
   MG_VIRTUAL = &PL_vtbl_utf8
   MG_TYPE = PERL_MAGIC_utf8(w)
   MG_LEN = 6

Output completed (3 sec consumed) - Normal Termination


In den entsprechenden Zeilen steht ein Whitelist-Regex:

Code (perl): (dl )
            $data =~ s/[^A-Za-z0-9!§$%&\/()=?{[\]}\\+#*'üäöÜÄÖ\-.,;:_<>|µ¤~\n\t\^&acute;ß ]/ /sg;


Weiss leider nicht, was ich weiter tun kann..

[EDIT2]:
Nächster Test: use locale auskommentiert. ->Es funktioniert alles wie erwartet! Leider kann ich dann keine Dateien mit Umlauten öffnen.. also auch keine Lösung...
Bin am verzweifeln.
Perl fand ich immer so geil, weil es dir den ganzen unnötigen Müll abnimmt und du nur das wesentliche programmieren musst. Momentan geht Perl da völlig falsche Wege :/\n\n

<!--EDIT|GoodFella|1174765539-->
kristian
 2007-03-24 21:55
#75310 #75310
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Ich fürchte ich kann dir auch nicht helfen.
Ich habe es zuletzt vor etwa 18 Monaten intensiv gemacht, von daher mein heutiges Halbwissen.
Verstanden was abgeht habe ich auch nie wirklich. (zdzd)
Für das grundsätzliche Verstehen scheint mir perldoc Encode sinvoll.
Zitat:
Quote
TERMINOLOGY
o character: a character in the range 0..(2**32-1) (or
more). (What Perl's strings are made of.)

o byte: a character in the range 0..255 (A special case of
a Perl character.)

o octet: 8 bits of data, with ordinal values 0..255 (Term
for bytes passed to or from a non-Perl context, e.g. a
disk file.)

Da findet sich dann direkt im Anschluss:
Quote
CAVEAT: When you run "$octets = encode("utf8",
$string)", then $octets may not be equal to $string.
Though they both contain the same data, the utf8 flag
for $octets is always off. When you encode anything,
utf8 flag of the result is always off, even when it
contains completely valid utf8 string. See "The UTF-8
flag" below.

Ich habe damals versucht eine Robot / Spider zu schreiben der unbekannte Daten aus dem Netz holt und in eine DB packt.
(Ziel: Suchmachine)

Das ganze lief ohnehin per Try and Error, wobei, ich hatte irgendwann eine Kombination der richtigen Modul-Versionen, die mit dem was ich geschrieben hatte das Ergebnis brachten das ich wollte.
Auf dem nächsten Rechner - gleiche Module nur andere Versionen - ging das Ganze wieder voll in die Hose.

Ich habe bislang nicht den Eindruck, dass Perl in Verbindung mit Unicode sinnig wäre um nach "der Zeile" zu fragen die die ganze Problematik auflöst.

Du kannst bestenfalls hinterfragen in welchem "Stadium" sich deine Daten gerade befinden, wenn du alles auf ein Level zwingst, klappt es ja auch wie erwartet.

Gruss
Kristian
GoodFella
 2007-03-24 23:45
#75311 #75311
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Danke für deine Mühe.

Das hört sich schwer nach Arschkarte für mich an.
Stellt sich die Frage, ob UTF8-Strings nur von aussen kommen können, also z.B. eingelesen aus einer DB; oder ob Perl sowas intern auch hat.
Wie bzw. unter welchen Umständen setzt Perl ein UTF8-Highbit(?) bzw. tut es das überhaupt?
Kann etwas in ein Tk::Entry geschriebenes im Script als UTF8 ankommen?

Weil wenn nur die Daten, die per Spreadsheet::ParseExcel ausgelesen werden, UTF8 sein können, dann reduziert sich mein Arbeitsaufwand enorm, schreibe ich einfach eine Read-sub mit utf8::downgrade enthalten.
ptk
 2007-03-24 23:57
#75312 #75312
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Schau dir mal die Strings mit Devel::Peek::Dump() an. Vielleicht sind dort Unicode-Zeichen versteckt, die man mit dem bloßen Auge nicht sehen kann.
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2007-03-24 00:04.