Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler seit PHP Update mit Charset?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehler seit PHP Update mit Charset?

    Hallo leute,
    ich habe folgendes Problem. Auf der Seite meiner Tante http://www.creatives-kochen.com lief bis vor kurzem alles ohne Probleme. Dann kam ein Update von PHP bzw der Anbieter hat die alten Versionen abgeschaltet. Seither gibt es Probleme mit der Darstellung.
    Dan Menü konnten wir noch umschreiben, sodass Umlaute einfach in ae ue ect. umgeschrieben wurden, sodass das Menü wieder sichtbar wurde (war vorher weg)

    Jetzt haben wir gleiches Problem aber leider beim Gästebuch, was gleichzeitig die Bewertung ist. Hier wurden keinerlei Texte mehr angezeigt.
    Ich habe mich daraufhin etwas mit dem Dateien beschäftigt, bin aber echt totaler Laie und hoffe ich kann dies hier einigermaßen umschreiben.

    Der Text wurde in der gb_show.php von UTF 8 in ISO per iconv umgesetzt. Nachdem ich es einfach von UTF 8 in UTF 8 geändert habe, wurde der Text nun wieder angezeigt.

    hier der original Code:
    PHP-Code:
    <?php
    ini_set
    ('display_errors'1);
    ini_set('display_startup_errors','1');
    error_reporting(E_ALL);
    ?>

    <?php
    require_once("config.php");
    require_once(
    $GB_PATH."inc/mini_tpl.class.php");
    require_once(
    $GB_PATH."inc/bad_words.inc.php");

    $gb_entry_tpl = new mini_tpl('gb_entry.html');
    $gb_show_tpl = new mini_tpl('gb_show.html');

    $entry_dir opendir($GB_PATH.'data');
    $gb_entries_txt "";
    $filenames = array();
    while(
    false !== ($filename readdir($entry_dir))) {
      
    $filenames[] = $filename;
    }
    $filenames array_reverse($filenames);
    $gb_entries_array = array();
    foreach(
    $filenames AS $filename) {
      if(
    preg_match('/^eintrag_\d*.xml/'$filename)) {
        
    $eintrag_sxml simplexml_load_file($GB_PATH.'data/'.$filename);
        
    $eintrag_array get_object_vars($eintrag_sxml);
        
    $eintrag_array['name'] = htmlentities(iconv("UTF-8""ISO-8859-1//TRANSLIT"$eintrag_array['name']));
        
    $eintrag_array['event_title'] = htmlentities(iconv("UTF-8""ISO-8859-1//TRANSLIT"$eintrag_array['event_title']));
        
    $eintrag_array['text'] = htmlentities(iconv("UTF-8""ISO-8859-1//TRANSLIT"$eintrag_array['text']));

        if(
    array_key_exists('gedecke'$eintrag_array)) $eintrag_array['gedecke'] = str_replace(',','.',$eintrag_array['gedecke']);
        else 
    $eintrag_array['gedecke'] = 2.5;
        
    $eintrag_array['bar_width'] = ($eintrag_array['gedecke']*32)."px";
        
    $eintrag_array['event_size_txt'] = (array_key_exists('event_size'$eintrag_array) && ($eintrag_array['event_size'] > 0)) ? '(ca '.$eintrag_array['event_size'].' G&auml;ste)' '';

        
    $gb_entry_tpl->clear_values();

        
    $gb_entry_tpl->fill_values($eintrag_array);
        
    $gb_entry_tpl->varlist['datum'] = $GB_DAY[date('w'$eintrag_array['time'])].', '.str_replace(" ""&nbsp;"date("j.m.Y    H:i"$eintrag_array['time']));
        
    $gb_entries_array[$eintrag_array['time']] = $gb_entry_tpl->getText();
      }
    }
    closedir($entry_dir);
    ksort($gb_entries_array);
    $gb_entries_txt join(''array_reverse($gb_entries_array));

    $gb_show_tpl->varlist['gb_entries'] = $gb_entries_txt;
    $gb_show_tpl->varlist['GB_SKINURL'] = $GB_SKINURL;
    echo 
    $gb_show_tpl->getText()

    ?>

    Hier meine geänderte Datei, damit die Einträge wieder Sichrbar wurden:

    PHP-Code:
    <?php
    ini_set
    ('display_errors'1);
    ini_set('display_startup_errors','1');
    error_reporting(E_ALL);
    ?>

    <?php
    require_once("config.php");
    require_once(
    $GB_PATH."inc/mini_tpl.class.php");
    require_once(
    $GB_PATH."inc/bad_words.inc.php");

    $gb_entry_tpl = new mini_tpl('gb_entry.html');
    $gb_show_tpl = new mini_tpl('gb_show.html');

    $entry_dir opendir($GB_PATH.'data');
    $gb_entries_txt "";
    $filenames = array();
    while(
    false !== ($filename readdir($entry_dir))) {
      
    $filenames[] = $filename;
    }
    $filenames array_reverse($filenames);
    $gb_entries_array = array();
    foreach(
    $filenames AS $filename) {
      if(
    preg_match('/^eintrag_\d*.xml/'$filename)) {
        
    $eintrag_sxml simplexml_load_file($GB_PATH.'data/'.$filename);
        
    $eintrag_array get_object_vars($eintrag_sxml);
        
    $eintrag_array['name'] = htmlentities(iconv("UTF-8""UTF-8"$eintrag_array['name']));
        
    $eintrag_array['event_title'] = htmlentities(iconv("UTF-8""UTF-8"$eintrag_array['event_title']));
        
    $eintrag_array['text'] = htmlentities(iconv("UTF-8""UTF-8"$eintrag_array['text']));
        
    $eintrag_array['text'] = preg_replace('/(\w{40})/'"\\1\n"$eintrag_array['text']);
        
    $eintrag_array['text'] = str_replace("\n""<br />\n"$eintrag_array['text' ]);
        
    $eintrag_array['text'] = str_replace("  "" &nbsp;"$eintrag_array['text' ]);
        
    $eintrag_array['text'] = str_replace("\\&quot;""&quot;"$eintrag_array['text' ]);

        if(
    array_key_exists('gedecke'$eintrag_array)) $eintrag_array['gedecke'] = str_replace(',','.',$eintrag_array['gedecke']);
        else 
    $eintrag_array['gedecke'] = 2.5;
        
    $eintrag_array['bar_width'] = ($eintrag_array['gedecke']*32)."px";
        
    $eintrag_array['event_size_txt'] = (array_key_exists('event_size'$eintrag_array) && ($eintrag_array['event_size'] > 0)) ? '(ca '.$eintrag_array['event_size'].' G&auml;ste)' '';

        
    $gb_entry_tpl->clear_values();

        
    $gb_entry_tpl->fill_values($eintrag_array);
        
    $gb_entry_tpl->varlist['datum'] = $GB_DAY[date('w'$eintrag_array['time'])].', '.str_replace(" ""&nbsp;"date("j.m.Y    H:i"$eintrag_array['time']));
        
    $gb_entries_array[$eintrag_array['time']] = $gb_entry_tpl->getText();
      }
    }
    closedir($entry_dir);
    ksort($gb_entries_array);
    $gb_entries_txt join(''array_reverse($gb_entries_array));

    $gb_show_tpl->varlist['gb_entries'] = $gb_entries_txt;
    $gb_show_tpl->varlist['GB_SKINURL'] = $GB_SKINURL;
    echo 
    $gb_show_tpl->getText()
    Jetzt habe ich leider das Problem, dass wenn neue Einträge gemacht werden, und dort im Text Umlaute geschrieben sind, diese erst gar nicht gespeichert werden. Normal werden Texte wie folgt in extra .xml Dateien gespeichert:
    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <eintrag>
      <name>Webmaster</name>
      <gedecke>5</gedecke>
      <event_title>Test</event_title>
      <event_size>23</event_size>
      <time>1490041528</time>
      <ip>46.5.0.9</ip>
      <text>dsf sdf sdsd wer wesdfsd ghfdg</text>
    </eintrag>
    Werden jetzt aber beim bewerten Umlaute in den Text geschrieben ist dieser in der neu angelegten Datei einfach leer. Und diesen Fehler finde ich einfach nicht. Wir möchten halt ungern die Leute bitten ohne Umlaute zu schreiben und der, der die Seite ursprünglich gemacht hat, ist leider nicht mehr zu erreichen.

    Wäre um jede Hilfe dankbar.

    Hier noch die gb_add.php code. Vlt wird dieser benötigt:

    PHP-Code:
    <?php
    ini_set
    ('display_errors'1);
    ini_set('display_startup_errors','1');
    error_reporting(E_ALL);
    ?>

    <?php
    require_once("config.php");
    require_once(
    $GB_PATH."inc/mini_tpl.class.php");
    require_once(
    $GB_PATH."inc/bad_words.inc.php");

    function 
    need_more_data($buggy_fields)
    {
      global 
    $GB_SKINURL$GB_PATH;

      
    $gb_add_tpl = new mini_tpl('gb_add.html');

      
    $values = array(
        
    'GB_SKINURL'=>$GB_SKINURL
      
    );

      
    $values['name'] = array_key_exists('name'$_POST) ? $_POST['name'] : '';
      
    $values['text'] = array_key_exists('text'$_POST) ? $_POST['text'] : '';
      
    $values['email'] = array_key_exists('email'$_POST) ? $_POST['email'] : '';
      
    $values['gedecke'] = array_key_exists('gedecke'$_POST) ? 1*str_replace(',''.'$_POST['gedecke']) : 5;
      
    $values['gedecke'] = str_replace('.'','$values['gedecke']);
      
    $values['event_title'] = array_key_exists('event_title'$_POST) ? $_POST['event_title'] : '';
      
    $values['event_size'] = array_key_exists('event_size'$_POST) ? 1*$_POST['event_size'] : '';
      if(
    $buggy_fields$values['buggy_fields'] = '<div style="border: 3px solid #cc0001; padding: 2px;"><h3>Einige Felder müssen korrigiert werden:</h3><ul><li>'
                                                  
    .implode('</li><li>'$buggy_fields).'</li></ul></div>';
      
    $gb_add_tpl->fill_values($values);
      echo 
    $gb_add_tpl->getText();
    }

    if(!
    array_key_exists('gb_data'$_POST)) need_more_data(FALSE);
    else {
      
    $buggy_fields = array();

      
    // Name-Feld prüfen
      
    if(strlen($_POST['name']) < 1$buggy_fields['name'] = 'Bitte geben Sie einen Namen ein';

      
    // Text-Feld prüfen
      
    $buggy_fields['text'] = array();
      if(
    strlen($_POST['text']) < 5)
          
    $buggy_fields['text'][] = 'Ihre Bewertung ist zu kurz';
    //  foreach($bad_words AS $bad_word)
    //    if(preg_match_all('/\W'.$bad_word.'\W/i', " ".$_POST['text'], $bad_word_found))
    //      $buggy_fields['text'][] = 'Bitte verwenden Sie keine Ausdrücke wie &quot;'.$bad_word_found[0][0].'&quot; in Ihrer bewertung';
      
    if(preg_match('/http:\/\//'$_POST['text']))
          
    $buggy_fields['text'][] = 'Links sind in Bewertungen nicht erlaubt';
      if(!
    array_key_exists('gb_pwd'$_POST)
         || ((
    str_replace(" """$_POST['gb_pwd']) != "Feier".(date("Y")-1))
         && (
    str_replace(" """$_POST['gb_pwd']) != "Feier".date("Y"))
         )) 
    $buggy_fields['text'][] = "Bitte geben Sie das richtige G&auml;ste-Passwort ein. Dieses finden Sie auf Ihrer Rechnung.";
      if(
    sizeof($buggy_fields['text']) < 1array_pop($buggy_fields);
      else 
    $buggy_fields['text'] = join('<br />'$buggy_fields['text']);

      if(
    sizeof($buggy_fields) > 0) {
        
    need_more_data($buggy_fields);
      }
      else {
        
    $nextID file_get_contents($GB_PATH.'data/nextID.txt') + 1;
        
    file_put_contents($GB_PATH.'data/nextID.txt'$nextID);

        
    $eintrag_xml ""
    ."<?xml version="1.0" encoding="UTF-8"?>\n"
    ."<eintrag>\n"
    ."  <name>".htmlspecialchars($_POST['name'])."</name>\n"
    // ."  <email>".htmlspecialchars($_POST['email'])."</email>\n"
    ."  <gedecke>".$_POST['gedecke']."</gedecke>\n"
    ."  <event_title>".$_POST['event_title']."</event_title>\n"
    ."  <event_size>".$_POST['event_size']."</event_size>\n"
    ."  <time>".time()."</time>\n"
    ."  <ip>".$_SERVER['REMOTE_ADDR']."</ip>\n"
    ."  <text>".htmlspecialchars($_POST['text'])."</text>\n"
    ."</eintrag>\n";

        
    file_put_contents($GB_PATH.'data/eintrag_'.$nextID.'.xml'$eintrag_xml);
        echo 
    "Alles OK, Eintrag gespeichert.<br /><a href="?cnt=guestb">zurück zu den Bewertungen</a>";

      }
    }
    ?>

    Danke schonmal vorab! Floely


  • #2
    Was soll die ganze Vergewaltigung mit iconv() und htmlentities()?

    Mach saubere Ausgaben und beachte den Kontextwechsel.

    Und der Code ist komplett unübersichtlich. Ich würde da mal aufräumen. Ansonsten kann man ja damit nicht sinnvoll arbeiten.

    Kommentar


    • #3
      Hallo, erstmal vielen Dank, nur wie gesagt habe ich das nicht gemacht und auch echt keine Ahnung davon. Habe nur gelesen dass man damit wohl den charset "übersetzen" kann. Was ja auch irgendwie mein Problem ist.

      Kommentar


      • #4
        Bleib bei UTF-8 dann brauchst du nichts übersetzen.

        https://php-de.github.io/jumpto/utf-8/

        http://www.php-rocks.de/thema/98-die...schw-rung.html

        Und Kontextwechsel zu HTML.. htmlspecialchars() nutzen.. mit dritten Parameter.. UTF-8.

        PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

        Kommentar


        • #5
          Zitat von floely Beitrag anzeigen
          Hallo, erstmal vielen Dank, nur wie gesagt habe ich das nicht gemacht und auch echt keine Ahnung davon.
          Der Code ist Mist und du hast keine Ahnung. Das ist eine ganz schlechte Kombination. Wie willst du ohne Ahnung den Code auf Vordermann bringen? Du bräuchtest jemanden, der das für dich macht, oder du lernst PHP.

          Kommentar


          • #6
            Hey erstmal danke für die Meldungen.
            Dass ich nicht viel Ahnung davon habe weiß ich, deswegen habe ich mich auch hier an das PHP Forum gewandt. Ob der Code mist ist, kann ich dadurch nicht beurteilen. Ich weiß nur, dass er schon einige Jahre auf dem Buckel hat.

            Meine Frage wäre, ob es was damit zu Tun hat, das der Webhoster (all-inkl) die alten PHP Versionen bis 5,6 abgeschaltet hat.
            Habe gelesen dass die alten einen anderen Charset hatten als die neuen.
            Könnte ich irgendwo den Charset wieder ändern, der dann für alle PHP Datein gilt, um das Problem zu beheben?

            Grüße,
            Floely

            Kommentar


            • #7
              Deine extra .xml -> encoding ISO....
              $eintrag_xml -> UTF..

              Es sind noch einige andere Fehler vorhanden.

              Ich würde die Seite neu aufsetzen, mit Wordpress ist das doch schnell gemacht, häßlich ist die Seite nicht, aber eben nicht mehr ganz zeitgemäß...

              Kommentar

              Lädt...
              X