You are not logged in.

  • Login

1

Tuesday, November 14th 2006, 1:13pm

Umlaute Problem // Die Lösung

Liegt es an der ajax.js?
Ich benütze die Version twilightuniverse

http://www.twilightuniverse.com/projects/sack/tw-sack.js

Ich habe es mit escape() probiert doch passiert nix. Auch wenn die Hauptseite auf utf-8 getagt ist....

2

Tuesday, November 14th 2006, 1:27pm

Was ist denn überhaupt das Problem?

Da du die Stichwörter utf8 und Ajax verwendest hilft dir vielleicht dies weiter:

http://de.wikipedia.org/wiki/Ajax_(Programmierung)#Probleme_durch_die_UTF-8-Zeichenkodierung

Quoted

Viele Ajax-Toolkits versenden XML-Daten, indem sie die in diesem Bereich gängige UTF-8-Zeichenkodierung benutzen. Manche Toolkits erfordern es auch, dass XML-Daten, die vom Webserver zum Webbrowser des Nutzers geschickt werden, in UTF-8 kodiert sein müssen. Wenn die Webseite selbst aber eine andere Zeichenkodierung benutzt, kann dies zu Konflikten mit den UTF-8-basierten XML-Daten führen. Eine mögliche Ursache ist, dass in einem XML-Dokument keine Entity-Referenzen (character entity reference) wie z.B. ö für das Zeichen „ö“ verwendet werden können – es sei denn, sie sind in einer eingebetteten Dokumenttypdefinition definiert oder das XML-Dokument ist nach ISO-8859-1 Zeichenkodierung erstellt worden. HTML hingegen gibt zahlreiche solcher Entities vor. In XML-Dokumenten ohne Dokumenttypdefinition können hingegen nur numerische Zeichenreferenzen (numeric character reference) verwendet werden.


HTML Code

1
2
3
4
<?xml version="1.0" encoding="utf-8" ?>
<anfang>
  <copyright>© 2006 Hans Wurst</copyright>
</anfang>


Unicode-basierte XML-Dokumente verwenden numerische Zeichenreferenzen, HTML-Dokumente jedoch nicht zwangsweise.

HTML Code

1
2
3
4
5
6
7
8
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body>
    <p>&copy; 2006 Hans Wurst</p>
  </body>
</html>


Generell würde ich dir empfehlen serverseitig in Entities zu konvertieren. Dann hast du keine Probleme und auch kein anderer, der vielleicht irgendwann dein Script verwenden wird.

3

Tuesday, November 14th 2006, 6:33pm

Das habe ich gelesen....

ich verwende im Content kein XML...
Ich verwende html Fragmente im Content wie:

HTML Code

1
2
3
4
5
6
7
8
9
10
11
<h1>Web 2.0</h1>
<p>10. Dein Fotoalbum ist hellblau mit rosa Rand.
9. Du korrigierst Rechtschreibfehler mit Edding in der Menükarte Deines Hawaianischen Lieblingsrestaurants.
8. Du recherchierst im Internet nach einer Suchmaschine für verloren gegangene Autoschlüssel.
7. Du taggst den Inhalt Deines Kühlschrankes mit PostIt-Zettel an der Tür und erstellst einen Einkaufszettel in Form eines Tagclouds.
6. Den Tod Deines Lieblingsonkels erfährst Du im Blog einer OpenBC-Bekanntschaft
5. Wenn Du einen Bleistift auf Deinem Schreibtisch siehst, klickst Du mit dem Finger drauf.
4. Auf den Tischkärtchen Deiner Hochzeitsfeier stehen Namen, wie "Seepferdchen79", und "CastagnetenPaul".
3. Der neue Freund Deiner Tochter wird erstmal über MySpace, LastFm und Flickr profiliert.
2. Du nennst Deinen Familiennamen um von Müller nach Müllr.
1. Du nennst Dein Erstgeborenes "Jürgen 2.0"</p>


Der Witz kommt leider so heraus....
10. Dein Fotoalbum ist hellblau mit rosa Rand.
9. Du korrigierst Rechtschreibfehler mit Edding in der Men�karte Deines Hawaianischen Lieblingsrestaurants.
8. Du recherchierst im Internet nach einer Suchmaschine f�r verloren gegangene Autoschl�ssel.
7. Du taggst den Inhalt Deines K�hlschrankes mit PostIt-Zettel an der T�r und erstellst einen Einkaufszettel in Form eines Tagclouds.
6. Den Tod Deines Lieblingsonkels erf�hrst Du im Blog einer OpenBC-Bekanntschaft
5. Wenn Du einen Bleistift auf Deinem Schreibtisch siehst, klickst Du mit dem Finger drauf.
4. Auf den Tischk�rtchen Deiner Hochzeitsfeier stehen Namen, wie �Seepferdchen79�, und �CastagnetenPaul�.
3. Der neue Freund Deiner Tochter wird erstmal �ber MySpace, LastFm und Flickr profiliert.
2. Du nennst Deinen Familiennamen um von M�ller nach M�llr.
1. Du nennst Dein Erstgeborenes �J�rgen 2.0�


Ajax:

JavaScript Code

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/* Simple AJAX Code-Kit (SACK) v1.6.1 */
/* ©2005 Gregory Wild-Smith */
/* www.twilightuniverse.com */
/* Software licenced under a modified X11 licence,
   see documentation or authors website for more details */
 
function sack(file) {
	this.xmlhttp = null;
 
	this.resetData = function() {
		this.method = "POST";
  		this.queryStringSeparator = "?";
		this.argumentSeparator = "&";
		this.URLString = "";
		this.encodeURIString = true;
  		this.execute = false;
  		this.element = null;
		this.elementObj = null;
		this.requestFile = file;
		this.vars = new Object();
		this.responseStatus = new Array(2);
  	};
 
	this.resetFunctions = function() {
  		this.onLoading = function() { };
  		this.onLoaded = function() { };
  		this.onInteractive = function() { };
  		this.onCompletion = function() { };
  		this.onError = function() { };
		this.onFail = function() { };
	};
 
	this.reset = function() {
		this.resetFunctions();
		this.resetData();
	};
 
	this.createAJAX = function() {
		try {
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) {
			try {
				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				this.xmlhttp = null;
			}
		}
 
		if (! this.xmlhttp) {
			if (typeof XMLHttpRequest != "undefined") {
				this.xmlhttp = new XMLHttpRequest();
			} else {
				this.failed = true;
			}
		}
	};
 
	this.setVar = function(name, value){
		this.vars[name] = Array(value, false);
	};
 
	this.encVar = function(name, value, returnvars) {
		if (true == returnvars) {
			return Array(encodeURIComponent(name), encodeURIComponent(value));
		} else {
			this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
		}
	}
 
	this.processURLString = function(string, encode) {
		encoded = encodeURIComponent(this.argumentSeparator);
		regexp = new RegExp(this.argumentSeparator + "|" + encoded);
		varArray = string.split(regexp);
		for (i = 0; i < varArray.length; i++){
			urlVars = varArray[i].split("=");
			if (true == encode){
				this.encVar(urlVars[0], urlVars[1]);
			} else {
				this.setVar(urlVars[0], urlVars[1]);
			}
		}
	}
 
	this.createURLString = function(urlstring) {
		if (this.encodeURIString && this.URLString.length) {
			this.processURLString(this.URLString, true);
		}
 
		if (urlstring) {
			if (this.URLString.length) {
				this.URLString += this.argumentSeparator + urlstring;
			} else {
				this.URLString = urlstring;
			}
		}
 
		// prevents caching of URLString
		this.setVar("rndval", new Date().getTime());
 
		urlstringtemp = new Array();
		for (key in this.vars) {
			if (false == this.vars[key][1] && true == this.encodeURIString) {
				encoded = this.encVar(key, this.vars[key][0], true);
				delete this.vars[key];
				this.vars[encoded[0]] = Array(encoded[1], true);
				key = encoded[0];
			}
 
			urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
		}
		if (urlstring){
			this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
		} else {
			this.URLString += urlstringtemp.join(this.argumentSeparator);
		}
	}
 
	this.runResponse = function() {
		eval(this.response);
	}
 
	this.runAJAX = function(urlstring) {
		if (this.failed) {
			this.onFail();
		} else {
			this.createURLString(urlstring);
			if (this.element) {
				this.elementObj = document.getElementById(this.element);
			}
			if (this.xmlhttp) {
				var self = this;
				if (this.method == "GET") {
					totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
					this.xmlhttp.open(this.method, totalurlstring, true);
				} else {
					this.xmlhttp.open(this.method, this.requestFile, true);
					try {
						this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
					} catch (e) { }
				}
 
				this.xmlhttp.onreadystatechange = function() {
					switch (self.xmlhttp.readyState) {
						case 1:
							self.onLoading();
							break;
						case 2:
							self.onLoaded();
							break;
						case 3:
							self.onInteractive();
							break;
						case 4:
							self.response = self.xmlhttp.responseText;
							self.responseXML = self.xmlhttp.responseXML;
							self.responseStatus[0] = self.xmlhttp.status;
							self.responseStatus[1] = self.xmlhttp.statusText;
 
							if (self.execute) {
								self.runResponse();
							}
 
							if (self.elementObj) {
								elemNodeName = self.elementObj.nodeName;
								elemNodeName.toLowerCase();
								if (elemNodeName == "input"
								|| elemNodeName == "select"
								|| elemNodeName == "option"
								|| elemNodeName == "textarea") {
									self.elementObj.value = self.response;
								} else {
									self.elementObj.innerHTML = self.response;
								}
							}
							if (self.responseStatus[0] == "200") {
								self.onCompletion();
							} else {
								self.onError();
							}
 
							self.URLString = "";
							break;
					}
				};
 
				this.xmlhttp.send(this.URLString);
			}
		}
	};
 
	this.reset();
	this.createAJAX();
}

4

Tuesday, November 14th 2006, 6:47pm

Welche Programmiersprache nutzt du denn um die Witze zu erzeugen
In php kannst du die Funktion htmlentities() nutzen um die Entities zu konvertieren

5

Tuesday, November 14th 2006, 8:14pm

Aha!?

Habe verstanden :lol:

PHP Quellcode

1
2
3
4
<?php
$text = "Drö Jöpönösön müt düm Känträbäs";
echo htmlentities($text);
?>


Aber dOnUt was mache ich wenn ich ein Newssystem für den Content installieren möchte (z.B) CutePHP... oder kennst du eines das einfach zu bedienen ist?

PHP Quellcode

1
2
3
4
5
<?PHP
$template="style";
$category ="2";
 
include("show_news.php");?>


Wie kann ich die htmlentities() hier einbauen?
Oder wie muss ich Vorgehen?

6

Wednesday, November 15th 2006, 6:37pm

Klappt

Das Newssystem gibt Umlaute direkt in htmlentities() aus.
Danke

7

Wednesday, November 15th 2006, 8:22pm

und hier ein kleiner Trick für andere externe Scripte ohne fertige Entities

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
<?php
$template="style";
$category ="2";
 
ob_start();
include("show_news.php");
$content = ob_get_contents();
ob_end_clean();
 
echo htmlentities($content);
?>

8

Thursday, November 16th 2006, 4:55am

...

Wahnsinn.
Gut, zu wissen. Hat mich vor ein paar Jahren zur Weissglut getrieben.
:oops: :idea:

Similar threads

Social bookmarks