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
<!DOCTYPE HTML>
<html>
<head>
<title>Test jQuery</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery-ui-1.8.21.custom.min.js"></script>
<script type="text/javascript" src="/javascript/jquery-set.js"></script>
<link rel="stylesheet" type="text/css" href="/css/jquery-ui.css">
<meta http-equiv="content-type" content="text/html;CHARSET=iso-8859-1">
</head>
<body>
<div class="demo2">
<div>
<label for="tags2">Suchbegriff:</label>
<input id="tags2">
</div>
</div>
<script>
jQuery(function() {
jQuery("#tags2").autocomplete({
source: function(request,response) {
var requestIndex = 0;
alert('Request: "'+escape(request.term)+'"');
$.ajax({
url: "test_autoc.pl",
data: "term=" + escape(request.term),
processData: false,
contentType: "application/json; charset=ISO-8859-1",
dataType: "json",
cache: false,
autocompleteRequest: requestIndex += 1,
success: function(data,status) {
if (this.autocompleteRequest === requestIndex) {
response(data);
}
},
error: function() {
if (this.autocompleteRequest === requestIndex) {
response([]);
}
}
});
},
minLength: 2
});
});
</script>
</div>
</body>
</html>
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
#!/usr/bin/perl -w use strict; use warnings; use CGI; use JSON qw (encode_json); my $cgi = CGI->new; my $quoted = quotemeta $cgi->param('term'); my %hash = ( 1 => 'Erna', 2 => 'Erwin', 3 => 'Markus', 4 => 'Heidi Petra', 5 => 'Test Quoting "mit" Anführungszeichen', 6 => 'Test mit Plus r+x', 9 => 'Suchbegriff/Debug: "' . $quoted . '"', ); my @json_array; foreach my $id ( sort {lc $hash{$a} cmp lc $hash{$b}} grep {$hash{$_} =~ m/$quoted/i || $_ == 9} keys %hash ) { push @json_array,{ id => $hash{$id}, label => $hash{$id}, value => $hash{$id}, }; } print STDOUT $cgi->header . JSON->new->latin1->encode(\@json_array);
2012-07-12T05:02:29 reneeWas macht denn die JS-Funktion "escape"?
Quoteescape()
[...]
Beachten Sie:
Diese Funktion hat ein problematisches Verhalten bei diversen Zeichen (das Pluszeichen wird z.B. nicht verändert, obwohl es dadurch in der URL als Leerzeichen interpretiert würde), und ist deshalb durch encodeURI() und encodeURIComponent() ersetzt.
2012-07-12T18:07:56 biancaWollte hier nochmal fragen, ob wirklich niemand mit ISO arbeitet und diese Anforderung schonmal lösen musste?
2012-07-12T23:03:23 pqich glaube, ich komme ziemlich oft mit verschiedenen ISO-normen in berührung. vielleicht solltest du einfach genauer spezifizieren, was du hier meinst?
2012-07-12T05:23:30 bianca2012-07-12T05:02:29 reneeWas macht denn die JS-Funktion "escape"?
Die sollte das selbe machen wie encodeURIComponent() aber es kommt ISO raus statt UTF. Die Umgebung ist komplett ISO.
2012-07-12T19:52:15 rostiUnd: Mit ISO oder UTF8 hat das überhaupt nichts zu tun, das '+' ist ein ASCII-Zeichen ;)
2012-07-13T01:51:27 bianca2012-07-12T19:52:15 rostiUnd: Mit ISO oder UTF8 hat das überhaupt nichts zu tun, das '+' ist ein ASCII-Zeichen ;)
Habe mal ein Screenshot angehängt wie es aussieht, wenn ich statt escape() encodeURIComponent() verwende.
Klaro ist dann das Plus Problem gelöst aber das nützt mir nichts, weil dann die Umlaute nicht matchen.
Und ist das nicht UTF, was da ankommt?
2012-07-13T06:40:06 biancaWie würdest du das im Script - welches ISO ist - weiter verarbeiten?
2012-07-13T07:22:32 pqwas ist denn ein ISO-skript?
2012-07-13T08:36:13 biancaDas ist ein Script, welches in ISO Zeichenkodierung gespeichert ist.
Ich verstehe deine Fragen nicht. War mein Code nicht aussagekräftig genug, dass man sehen kann, worum es mir geht?
Quoterosti, das weiß ich alles (bis auf das Plus, das hatte ich nicht mehr auf dem Schirm).
Meine Frage ist ja nun, wie würdest du soetwas lösen?
2012-07-13T15:26:05 rostiWorkaround (ungetestet): Mit JavaScript RegEx alle Pluszeichen in jeweils ein %2B umwandeln und an das XHR-Objekt übergeben. Dann sollte der Rest auch als ISO-8859-1 funktionieren.
2012-07-13T16:00:49 rostiWenn nur deutsche Umlaute drin sind, geht die Konvertierung (Iso-8859-1 => UTF-8) zu machen. Daten sichern und los gehts. Du wirst es nicht bereuen, wenn Du alles auf UTF-8 hast. Nimm Encode.pm zum Einmal-Umkodieren mit einem kleinen Script, das ist schnell geschrieben.
2012-07-13T16:00:49 rostiAutomatische Erkennung der Kodierung? Glücksspiel.
2012-07-13T16:00:49 rostiMach selbst eine Sichtkontrolle mit einem geeigneten Editor, das ist immer noch am Sichersten.
2012-07-13T16:00:49 rostiViel Erfolg!
2012-07-13T16:00:49 rostiPS: Für das Konvertierungs-Script, denke an den <> Diamond-Operator zum Einlesen von Dateien auf der Kommandozeile. Is ja alles nur Text... *G
2012-07-13T15:54:07 bianca@Mod: Bitte um Split des Threads ab msg #159825 zu neuem Teilbaum mit dem Titel "latin-1 Dateien erkennen und in UTF-8 umwandeln". Danke
2012-07-13T17:51:25 pqhab ich gemacht
2012-07-13T17:51:25 pqkannst du aber das nächste mal bitte selber machen (artikel-edit und titel eingeben)
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
jQuery(function() { jQuery("#tags2").autocomplete({ source: function(request,response) { var requestIndex = 0; alert('Request: "'+request.term+'"'); $.ajax({ url: "test_autoc.pl", type: 'POST', data: "term=" + request.term, processData: false, contentType: "application/json; charset=ISO-8859-1", dataType: "text/plain", cache: false, autocompleteRequest: requestIndex += 1, success: function(data,status) { if (this.autocompleteRequest === requestIndex) { response(data); } }, error: function() { if (this.autocompleteRequest === requestIndex) { response([]); } } }); }, minLength: 2 }); });
[{"value":"X","label":"Suchbegriff/Debug: \"mar\"","id":"X"},{"value":"Markus","label":"Markus","id":"Markus"}]
[{"value":"X","label":"Suchbegriff/Debug: \"r\\ \"","id":"X"}]
2012-07-13T08:30:15 GwenDragonAber dann musst du im CGI die empfangenen Daten selbst parsen.
2012-07-13T10:11:42 pqvorausgesetzt, du meinst mit deinem "ISO" (welches ein name einer organisation ist, was ich mehrfach erwähnt habe), sowas wie ISO 8859-1, kurz und knackig latin-1 genannt,
2012-07-13T10:11:42 pqwarum nimmst du nicht einfach Encode.pm?
2012-07-13T11:37:30 GwenDragonTut mir leid, aber es gibt nicht nur ein ISO-xxxx-y als Zeichenkodierung!
Deswegen ist deine Aussage ISO = ISO-8859-1 für Webentwickler und andere schlichtweg nicht logisch vollziehbar.
2012-07-13T12:31:27 RaubtierNein, das ist es eben nicht - schon klar, dass du nicht die Organisation meinst - aber was du meinst, ist eben nicht klar. Erlaubst du zum Beispiel das Euro-Zeichen "€"? Dieses ist nicht in ISO-8859-1 enthalten.
2012-07-13T13:44:53 GwenDragonAha! Ich dachte du weißt, was ISO-xxxx-y ist!?
Latin-1 und Latin-9 unterscheiden sich.
2012-07-13T13:44:53 GwenDragonAnscheinend sind bei deiner Webanwendung doch keinerlei Vorgaben.
Nimm UTF-8, dann ist Ruhe mit dem elendigen Hin-und-Her-Konvertieren..
2012-07-13T12:20:05 biancaNa ja. In meinem Code ist ja ersichtlich, dass es (...)