Zeichenkodierung bei AJAX un PHP // EINFACHE LÖSUNG

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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:

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    5. <meta http-equiv="pragma" content="no-cache" />
    6. <meta http-equiv="cache-control" content="no-cache" />
    7. <meta name="description" content="Webdesign Help Desk" />
    8. <meta name="keywords" content="keywords"/>
    9. <meta name="author" content="Remixaholic"/>
    10. <link rel="stylesheet" type="text/css" href="style.css" />
    11. <title>Remixaholic</title>
    12. <script src="inhalt/include/ajax.js" type="text/Javascript"></script>
    13. </head>
    14. <body onload="geturl('inhalt','inhalt/home.php')">
    15. <div class="top">
    16. <div class="header">
    17. <div class="headerleft"></div>
    18. <div class="headerright">
    19. <?php include "player.php"; ?>
    20. </div>
    21. </div>
    22. </div>
    23. <div class="container">
    24. <div class="main">
    25. <div id="inhalt"></div>
    26. <div class="navi">
    27. <?php include "inhalt/include/navi_main.php"; ?>
    28. </div>
    29. <br />
    30. <div class="navi">
    31. <?php include "inhalt/include/navi_design.php"; ?>
    32. </div>
    33. <br />
    34. <div class="navi">
    35. <?php include "inhalt/include/navi_dl.php"; ?>
    36. </div>
    37. <div class="clearer"><span></span>
    38. </div>
    39. </div>
    40. <div class="footer">
    41. <?php include "inhalt/include/footer.php"; ?>
    42. </div>
    43. </div>
    44. </body>
    45. </html>
    Alles anzeigen


    Hier die Ajax.js:

    Quellcode

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



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

    Quellcode

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

    Quellcode

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


    Oder eben sehr einfach automatisch:

    Quellcode

    1. $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.';
    2. $string = htmlentities($string);
    3. echo $string;


    Ausgabe kannst du ja selber testen.
  • 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 ;)
  • 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
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • 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.

    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan