You are not logged in.

  • Login

1

Monday, May 14th 2007, 11:21pm

Zeichenkodierung bei AJAX un PHP // EINFACHE LÖSUNG

Also ich habe angefangen meine Seiten langsam mal mit php und Ajax zu basteln,
Leider bin ich in dieser Hinsicht noch anfänger und der Source is wahrscheinlich grauenhaft <g> hab das Layout mit Div Container und CSS gemacht.

Jetzt hab ich, wie viele andere auch, das problem mit der Zeichenkodierung.
Ich hab hier im Ajax Bereich auch schon die ganzen Zeichenkodierung Threads durch
nur leider kam ich noch nicht zu einer Lösung, so das ich das Thema nochmal
aufwirbeln muss, auch wenn es euch schon zum Hals raushängt <g>

Also hier mal der Code meiner Index:

HTML 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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
 
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<meta http-equiv="pragma" content="no-cache" />
	<meta http-equiv="cache-control" content="no-cache" />
	<meta name="description" content="Webdesign Help Desk" />
	<meta name="keywords" content="keywords"/> 
	<meta name="author" content="Remixaholic"/> 
	<link rel="stylesheet" type="text/css" href="style.css" />
	<title>Remixaholic</title>
 
<script src="inhalt/include/ajax.js" type="text/Javascript"></script>
</head>
<body onload="geturl('inhalt','inhalt/home.php')">
	<div class="top">
	<div class="header">
	<div class="headerleft"></div>
	<div class="headerright">
	<?php include "player.php"; ?>
</div>
</div>
</div>
	<div class="container">	
	<div class="main">		
	<div id="inhalt"></div>
	<div class="navi">
	<?php include "inhalt/include/navi_main.php"; ?>
</div>
<br />
	<div class="navi">
	<?php include "inhalt/include/navi_design.php"; ?>
</div>
<br />
	<div class="navi">	
	<?php include "inhalt/include/navi_dl.php"; ?>		
</div>
	<div class="clearer"><span></span>
</div>
</div>	
	<div class="footer">	
	<?php include "inhalt/include/footer.php"; ?>
</div>
</div>
</body>
</html>


Hier die Ajax.js:

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try {
	req = window.XMLHttpRequest?new XMLHttpRequest(): 
	new ActiveXObject("Microsoft.XMLHTTP"); 
} catch (e) {
	//Kein AJAX Support
} 
 
function geturl(elem, url) {
	req.onreadystatechange = function() {
		if ((req.readyState == 4) && (req.status == 200)) { 
			document.getElementById(elem).innerHTML = req.responseText;
		}
	};
	req.open('POST', 'func.php');
	req.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
	req.send('url='+url); 
}



Soweit so gut, die navi_main.php habe ich so gemacht:

HTML Code

1
2
3
4
5
6
7
8
9
<h2>» Hauptmenü «</h2>
		<ul>
		<a href="#" onclick="geturl('inhalt','inhalt/home.php')">Startseite</a>
		<a href="#" onclick="geturl('inhalt','inhalt/about.php')">About Me / Bilder</a>
		<a href="#" onclick="geturl('inhalt','inhalt/media.php')">Media / Promotion</a>
		<a href="#" onclick="geturl('inhalt','inhalt/partner.php')">Partner / Linkliste</a>
		<a href="#" onclick="geturl('inhalt','inhalt/gbook.php')">Gästebuch</a>
		<a href="#" onclick="geturl('inhalt','inhalt/kontakt.php')">Kontaktformular</a>
		</ul>



Also wie mach ich das am besten mit der Zeichenkodierung ?
Ich wäre natürlich auch dankbar wenn ihr auch Vorschläge zur verbesserung des
Codes habt, oder vllt jemand der mir über einen Messenger supoort geben könnte.


Greetz

Remix[a]holic

2

Monday, May 14th 2007, 11:36pm

So wie ich das jetzt sehe, handelt es sich um das übliche Probleme der Umlaute, etc., oder? In deinem Fall wäre das unter anderem "Gästebuch".

Ich kenne das Problem, dass du da beschreibst. Bei mir war es genau so, dass sämtliche Lösungen keine Abhilfe schafften. Letztendlich habe ich es dann aber mit einer recht umständlichen Lösung hinbekommen.

PHP stellt dabei eine sehr gute Funktion zur Verfügung. htmlentities (oder htmlspecialchars) wandelt alle Umlaute, etc. in entsprechende HTML-Codes um. Leider birgt das wieder das Problem, das dabei auch normaler HTML-Code umgewandelt wird und so nicht mehr vom Browser interpretiert wird. Besser habe ich es jedoch nie wirklich hinbekommen. Mit entsprechenden Lösungen - zum Beispiel manuell oder sogar automatisch - vorhandenen HTML-Code zu umgehen hat es bisher einwandfrei geklappt.

Ich hoffe, das hilft dir irgendwie weiter.

3

Monday, May 14th 2007, 11:39pm

Ya genau die Umlaute ^^
Das hört sich schonmal gut an, geht das wenn ich den HTML Code in PHP umwandle ?
also mit echo, oder wäre das schwachsinn?

hab auch schon bisschen was über die funktion gelesen und auch über utf8_en/decode
aber kapier irgendwie nich ganz wie ich das einbauen soll, könntest du mir vllt ein kleines beispiel geben?

4

Monday, May 14th 2007, 11:45pm

Ich zeige dir mal, wie beide Lösungen in etwa aussehen könnten.

Einmal manuell: (es fehlen übrigens li-Tags, damit du wirklich ein valides Ergebnis erhälst)

HTML Code

1
2
3
4
<h2>» Hauptmenü «</h2>
                <ul>
                <li><a href="#" onclick="geturl('inhalt','inhalt/gbook.php')">G&auml;stebuch</a></li>
                </ul>


Oder eben sehr einfach automatisch:

PHP Quellcode

1
2
3
4
5
$string = 'Das ü gehört ja schon zum schönen Überlauftäufer, dessn größerer Bruder mit Brüder durch aus das große Ü vergleicht. Naja, und das <strong>Dicke</strong> wäre auf einmal nicht mehr dick. Lädär.';
 
$string = htmlentities($string);
 
echo $string;


Ausgabe kannst du ja selber testen.

5

Tuesday, May 15th 2007, 12:01am

hm ok ich denke ich werde es manuel korrigieren da ich eh den kompletten Inhalt noch machen muss und so auf nummer sicher geh :D

Das mit den <li> war absicht, das problem is das ich dann vor dem Menü die punkte habe, wegen der auflistung <g> wollte ich mich danach mal ranmachen <g> muss nur in der CSS datei das ul ma ändern <g> is kein prob <g> bisschen was schaff ich auch allein ;)


Und nochma ein kompliment an das Board hier ;) in den meisten anderen Foren hätte ich als antwort bekommen "Benutz die Suchfunktion, das gabs hier schon"! ich habe bei euch festgestellt das das nicht so ist, was ich auch sehr schätze. Respekt und macht weiter so ^^ werd wohl noch öfters kommen und fragen ;) und auch mal versuchen mit meinem "bisschen" Wissen jemandem zu helfen ;)

6

Tuesday, May 15th 2007, 5:35am

So hab nochmal ein bisschen im Netz recherchiert und bin dabei auf etwas nützliches
gestoßen. es gibt ein kleines Freeware Programm namens HTML Entity Converter einfach zu bedienung und danach gehn alle umlaute :D

7

Tuesday, May 15th 2007, 7:45am

hm

tritt das problem auf bei der übertragung per ajax oder schon beim schreiben des contents?

bei der übertragung per ajax hilft meißt utf8_encode() und utf8_decode

ansonsten musst du bei nem linux webserver eh meist die umlaute konvertieren.

ultraedit hat zb diese funktion schon integriert und tut selbiges auf knopfdruck ;)


Mfg da BendIt

8

Tuesday, May 15th 2007, 5:36pm

Nochmals danke für die Hilfe aber es ist schon gelöst :)

kann geschlossen werden ;)

9

Wednesday, May 16th 2007, 12:32pm

Hallo,

das Problem scheint ja gelöst, trozdem noch eine kleine Bemerkung dazu:

Meiner Meinung nach der einzig wirklich richtige Ansatz hier ist konsequent alles auf UTF8 umstellen. D.h. die HTML-Seiten, den php-Code und die Datenbank.

Klar gehts auch mit utf8_encode/decode, aber bei größeren Projekten verliert man damit sehr schnell den Überblick.

Durch die Umstellung kann man weitgehenst auf Entities verzichten, der Umgang mit XML, XSL, FOP etc wird wesentlich unkomplizierter und die Unterstützung von "exoten" Sprachen geht auch meist ohne Probleme.

Die Umstellung auf UTF8 ist erst mal gewöhnunsbedürftig, und man tappt zu anfangs in die ein oder andere Falle; vorallem bei php, da eine 100%tige UTF8 Unterstützung erst mit Version 6 geplant ist, aber wenn man's mal raus hat wird dadurch vieles einfacher.

melwood

Social bookmarks