Malte: Javascript Funktion gesucht.

Hi,

ich suche eine Javascriptfunktion.
Und zwar folgendes, wenn der User einen Text in das textfeld schreibt und dieses abschickt, soll die Funktion vorher aufgerufen werden und die Umlaute in die richtige HTMLsprache um schreiben.

Das heißt ä => ä

Gibt es sowas?
Ich habe es mit PHP versucht:

  
<?php  
 function sonderzeichen ($sonderzeichen){  
 $sonderzeichen = str_replace('ö', '&ouml;', $sonderzeichen);  
 $sonderzeichen = str_replace('ä', '&auml;', $sonderzeichen);  
 $sonderzeichen = str_replace('ü', '&uuml;', $sonderzeichen);  
 $sonderzeichen = str_replace('Ö', '&Ouml;', $sonderzeichen);  
 $sonderzeichen = str_replace('Ä', '&Auml;', $sonderzeichen);  
 $sonderzeichen = str_replace('Ü', '&Uuml;', $sonderzeichen);  
 $sonderzeichen = str_replace('ß', '&szlig;', $sonderzeichen);  
 $sonderzeichen = str_replace('%', '&#37;', $sonderzeichen);  
 $sonderzeichen = str_replace('$', '&#36;', $sonderzeichen);  
 $sonderzeichen = str_replace('@', '&#64;', $sonderzeichen);  
return $sonderzeichen;  
 }  
?>  

Aber ich kann die Funktion noch so oft aufrufen wie ich will, die Sonderzeichen werden nicht ersetzt.

Danke für die Hilfe

  1. hi,

    ich suche eine Javascriptfunktion.
    Und zwar folgendes, wenn der User einen Text in das textfeld schreibt und dieses abschickt, soll die Funktion vorher aufgerufen werden und die Umlaute in die richtige HTMLsprache um schreiben.

    Das heißt ä => &auml;

    Wozu soll das gut sein?

    Wenn du gleich eine passende Zeichenkodierung verwendest (und dies auch entsprechend angibst), kannst du dir solche Umwandlungen komplett sparen.

    Ich habe es mit PHP versucht: [...]
    Aber ich kann die Funktion noch so oft aufrufen wie ich will, die Sonderzeichen werden nicht ersetzt.

    Kommen die Zeichen denn überhaupt als ä, ö, ü, ... am Server an - oder hast du vielleicht bereits vorher ein Problem mit unterschiedlichen Zeichenkodierungen? Dann solltest du dieses beseitigen, anstatt halbgare Workarounds zu basteln.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      also auf der Seite wo der User in die Textarea schreiben kann habe ich die richtige Zeichenkodierung angegeben.
      Und dann wird alles an diese Datei geschickt:

        
      <?php  
      error_reporting(E_ALL);  
        
      include('../config.inc.php');  
      include('../includes/special_character.php');  
        
      $event_title = sonderzeichen(addslashes(htmlspecialchars($_POST['event_title'])));  
      $event_date = sonderzeichen(addslashes(htmlspecialchars($_POST['event_date'])));  
      $event_time = sonderzeichen(addslashes(htmlspecialchars($_POST['event_time'])));  
      $event_place = sonderzeichen(addslashes(htmlspecialchars($_POST['event_place'])));  
      $event_website = sonderzeichen(addslashes(htmlspecialchars($_POST['event_website'])));  
      $event_desc = htmlspecialchars(addslashes(sonderzeichen($_POST['event_description'])));  
        
      if(isset($_GET['changeid']))  
      {  
      $a_query = mysql_query("UPDATE events set event = '".$event_title."', date = '".$event_date."', time = '".$event_time."', place = '".$event_place."', website = '".$event_website."', description = '".$event_desc."' WHERE id = '".$_GET['changeid']."'") OR die(mysql_error());  
      }  
      else  
      {  
      $a_query = mysql_query("INSERT INTO events(event, description, place, date, time, website) VALUES('".$event_title."', '".$event_desc."', '".$event_place."', '".$event_date."', '".$event_time."', '".$event_website."')") OR die(mysql_error());  
      }  
        
      echo $event_desc;  
      ?>  
      
      
      1. hi,

        also auf der Seite wo der User in die Textarea schreiben kann habe ich die richtige Zeichenkodierung angegeben.

        Das ist nur eine von vielen Stellen, wo die Zeichenkodierung beachtet werden sollte.

        Die Scripte sollten in der richtigen Kodierung abgespeichert werden,
        die Datenbank diese ebenfalls verwenden,
        die Verbindung zur Datendank darauf eingestellt sein,
        die Kodierung der Ausgabe dem Client entsprechend bekanntgebeben werden,
        etc. pp.

        Da das Thema Kodierungsprobleme hier so häufig auftaucht, recherchiere dazu bitte im Archiv - beziehe ggf. author:dedlfix in die Suche mit ein, der äußert sich oftmals sehr detailiert zu diesem Thema.

        $event_title = sonderzeichen(addslashes(htmlspecialchars($_POST['event_title'])));

        Das ist ziemlicher Murks.
        htmlentities statt htmlspecialchars würde dir das, was du in deiner eigenen Funktion sonderzeichen zu machen versuchst, bereits weitestgehend abnehmen.
        Und addslashes ist nicht die richtige Funktion zum Vorbereiten von Daten für den Einsatz in MySQL-Queries - dafür nimmt man, hier schon x-fach erwähnt, mysql_real_escape_string.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi,

          ich habe es jetzt so gemacht:

            
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
            
           "http://www.w3.org/TR/xhtml1/DTD/Strict.dtd">  
            
          <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">  
            
          <head>  
            
          <meta http-equiv="Content-Type" content="text/html; iso-8859-1" />  
            
          <meta http-equiv="Pragma" content="cache" />  
            
          <meta name="ROBOTS" content="INDEX,FOLLOW" />  
            
          <meta http-equiv="Content-Language" content="de" />  
            
          <meta name="description" content="Das ist die Webseite der Jugend von der Westersteder Baptistengemeinde" />  
            
          <meta name="keywords" content="Jesus, Westerstede, Jugende, Freunde, Jugendliche, Spaß Jesus, Glaube, Baptisten" />  
            
          <meta name="author" content="Malte Kiefer"/>  
            
          <meta name="publisher" content="Malte Kiefer" />  
            
          <meta name="copyright" content="Malte Kiefer" />  
            
          <meta name="audience" content="Alle" />  
            
          <meta name="revisit-after" content="2 days" />  
            
          <title>Jugend der EFG-Westerstede :: Jesus loves you</title>  
            
          </head>  
          <body>  
          <?php  
          error_reporting(E_ALL);  
            
          include('../config.inc.php');  
          include('../includes/special_character.php');  
            
          $event_title = htmlentities($_POST['event_title']);  
          $event_date = htmlentities($_POST['event_date']);  
          $event_time = htmlentities($_POST['event_time']);  
          $event_place = htmlentities($_POST['event_place']);  
          $event_website = htmlentities($_POST['event_website']);  
          $event_desc = htmlentities($_POST['event_description']);  
            
          echo $event_desc;  
            
          if(isset($_GET['changeid']))  
          {  
          $a_query = mysql_query("UPDATE events set event = '".$event_title."', date = '".$event_date."', time = '".$event_time."', place = '".$event_place."', website = '".$event_website."', description = '".mysql_real_escape_string($event_desc)."' WHERE id = '".$_GET['changeid']."'") OR die(mysql_error());  
          }  
          else  
          {  
          $a_query = mysql_query("INSERT INTO events(event, description, place, date, time, website) VALUES('".$event_title."', '".mysql_real_escape_string($event_desc)."', '".$event_place."', '".$event_date."', '".$event_time."', '".$event_website."')") OR die(mysql_error());  
          }  
            
          ?>  
          </body>  
          </html>  
          
          

          Das Ergebnis bei einer Reihe von ääääääääääääääääääääääää sieht dann so aus:

            
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
           "http://www.w3.org/TR/xhtml1/DTD/Strict.dtd">  
          <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">  
          <head>  
          <meta http-equiv="Content-Type" content="text/html; iso-8859-1" />  
          <meta http-equiv="Pragma" content="cache" />  
          <meta name="ROBOTS" content="INDEX,FOLLOW" />  
          <meta http-equiv="Content-Language" content="de" />  
          <meta name="description" content="Das ist die Webseite der Jugend von der Westersteder Baptistengemeinde" />  
          <meta name="keywords" content="Jesus, Westerstede, Jugende, Freunde, Jugendliche, Spaß Jesus, Glaube, Baptisten" />  
          <meta name="author" content="Malte Kiefer"/>  
          <meta name="publisher" content="Malte Kiefer" />  
          <meta name="copyright" content="Malte Kiefer" />  
          <meta name="audience" content="Alle" />  
          <meta name="revisit-after" content="2 days" />  
          <title>Jugend der EFG-Westerstede :: Jesus loves you</title>  
          </head>  
            
          <body>  
          &Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;&Atilde;&curren;</body>  
          </html>  
          
          
          1. hi,

            ich habe es jetzt so gemacht:

            Ja, fein - schmeiss uns mit Code zu, das ist immer sehr beliebt ...

            Wird die Seite vom Server mit der richtigen Charset-Angabe im Content-Type-Header ausgeliefert? (Zu prüfen bspw. über http://web-sniffer.net/.)

            Im Formular sollte ggf. noch eine accept-charset-Angabe ergänzt werden.

            Das Ergebnis bei einer Reihe von ääääääääääääääääääääääää sieht dann so aus:
            &Atilde;&curren;&Atilde;&curren;&Atilde;...

            Aha, also wird offenbar UTF-8 geliefert (und anschließend in HTML-Entities umgeschrieben), und nicht ISO-8859-1.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hi,

              also das kam beim Text raus:

              Connect to 193.201.54.39 on port 80 ... ok

              POST /jugend/admin/save_event.php HTTP/1.1[CRLF]
              Host: newwarrior.milten.lima-city.de[CRLF]
              Connection: close[CRLF]
              Accept-Encoding: gzip[CRLF]
              Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5[CRLF]
              Accept-Language: de-de,de;q=0.5[CRLF]
              Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7[CRLF]
              User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8.0.7) Gecko/20060830 Firefox/1.5.0.7 (Debian-1.5.dfsg+1.5.0.7-1) Web-Sniffer/1.0.24[CRLF]
              Referer: http://web-sniffer.net/[CRLF]
              Content-type: application/x-www-form-urlencoded[CRLF]
              Content-length: 0[CRLF]
              [CRLF]

              »»Aha, also wird offenbar UTF-8 geliefert (und anschließend in HTML-Entities umgeschrieben), und nicht ISO-8859-1.

              Und wie kann ich es ändern, dass es in ISO-8859-1 geliefert wird?

              1. hi,

                also das kam beim Text raus:

                Das ist das, was vom web-sniffer an den Server geschickt wird.
                Wie dessen Antwort ausschaut, steht weiter unten.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hi,

                  also das kam raus:

                  text/html; charset=UTF-8

                  Aber ich verstehe nicht warum?

                  1. hi,

                    text/html; charset=UTF-8

                    Aber ich verstehe nicht warum?

                    Weil dein Server entsprechend eingestellt ist.

                    Wende dich entweder an deinen Serveradministrator, oder
                    stelle es selbst um Konfigurationseinstellung default_charset), oder
                    sorge per header() explizit in allen deinen Script dafür.

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                    1. Hi,

                      ok, ich würde das gerne mit dem Link machen, aber wie kann ich das genau machen?
                      Oder Wie kann ich das mit dem Header machen, wie du es meintest?
                      Danke

                      Konfigurationseinstellung default_charset

                      1. hi,

                        ok, ich würde das gerne mit dem Link machen, aber wie kann ich das genau machen?

                        RTFM.
                        Wo und wie man Konfigurationseinstellungen von PHP ändern kann, verrät dir das Manual.

                        Oder Wie kann ich das mit dem Header machen, wie du es meintest?

                        RTFM, das Manual zur Funktion enthält Beispiele und Nutzerkommentare.

                        Bitte erwarte nicht, dass dir hier alles haarklein vorgekaut wird.

                        gruß,
                        wahsaga

                        --
                        /voodoo.css:
                        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Welchen Grund siehst du, deine Datenbank mit HTML entities zu füllen?
        Du handelst dir damit mehr Probleme ein, als das es was nutzt.

        Struppi.

        --
        Javascript ist toll (Perl auch!)