Thread mein script verweigert ignore_case in utf-8 pattern matching
(23 answers)
Opened by technix at 2013-06-02 16:19
So, hier ein völlig versimpeltes Beispiel:
http://www.codebase.at/bb.pl Bitte ausprobieren, man versteht's gleich. Script ist utf8 codiert, Daten sind utf-8 auch die Eingabe verlangt utf-8 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 #!/usr/bin/perl -w use CGI::Carp qw( fatalsToBrowser ); use Encode qw(encode decode); $enc = 'utf-8'; $infile = "bb.txt"; $in{'bez'}="Rad"; ¶m_in; print qq*Content-type: text/html; charset=utf-8\n <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <form method="GET" action="bb.pl" name="ArtSuch" accept-charset="UTF-8"> <input type="hidden" name="dummyChar" value="♥" /> <!--wegen IE utf-8 problem--> Bitte nach deutschen Umlauten (groß/kleingeschrieben) suchen<br> Suchtext <input name="bez" size="10" value="" maxlength="3" type="text"></form>*; print "gesucht wird: $in{'bez'}<br><br>Ergebnis:<br>"; if (-T $infile) { open(ZEUG, "<$infile") || die "keine Textdatei\n";} while(<ZEUG>) { $testline=$_; if ($testline =~ m/$in{'bez'}/i) { print "$testline <-- ich hab ein "$in{'bez'}" gefunden!<br>"; } else { print "$testline<br>"; } } print qq*<br>Eine Suche nach F findet alle 3 F (groß und klein)<br> leider ist das bei den Umlauten nicht so"*; exit(0); #---------------------------------------------- sub param_in { if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } @nvpairs = split(/&/,$buffer); foreach $pair (@nvpairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$name} = $value; } } Ich entwickle mit perl 5.10.0, Produktion ist per 5.8.8, coding passiert meist remote auf einem CentOS 5.9 & 6.3 Linux. Alle Eure Vorschläge werde ich gleich ausprobieren. Und jetzt warte ich auf Eure Kopfnüsse :-) |