Announcement

Collapse
No announcement yet.

Wieder mal das "Fehlerhafte Umlaute in der Datenbank"-Problem

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wieder mal das "Fehlerhafte Umlaute in der Datenbank"-Problem

    Hallo zusammen.

    Ich habe bei meinem in vBulletin 3 importierten Datenbank, dann auf vBulletin 5 geupgradet, fehlerhafte Umlaute. Ich wollte deswegen dieses hier gepostete Skript ausführen, aber es scheint nicht richtig durchzulaufen, es gibt nur "UTF-8" aus, das wars. Gleichzeit meldet der Browser einen "Datei nicht gefunden"-Fehler.

    Das Skript sieht so aus:

    Code:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    </head>
    <body>
    <?php
    $string = utf8_encode($string);
    /* internes character encoding auf UTF-8 setzen */
    mb_internal_encoding("UTF-8");
    
    /* aktuelles internes character encoding anzeigen */
    echo mb_internal_encoding();
    $db_host = "localhost"; // Host der Datenbank
    $db_user = "XXXX"; // Datenbank-User
    $db_pass = "XXXX"; // Datenbank-Passwort
    $db_name = "XXXX"; // Name der Datenbank
    
    $db = mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error());
    mysql_query("SET NAMES 'utf8'");
    mysql_select_db($db_name,$db) or die(mysql_error());
    
    $show="SHOW TABLES FROM ".$db_name;
    $ergebnis=mysql_query($show) ;
    
    $qry = "Tables_in_".$db_name."";
    
    $all_affected_rows = 0; //Variable zur Zählung aller betroffenen Datensätze
    
    /* Ersetze diese Zeichen (beliebig erweiterbar) */
    $array_von = array('ü', 'ä', 'ö', 'Ö', 'ß', 'à ', 'á', 'â', 'ã', 'ù', 'ú', 'û', 'Ù', 'Ú', 'Û', 'Ü', 'ò', 'ó', 'ô', 'è', 'é', 'ê', 'ë', 'À', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Î', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ø', 'å', 'æ', 'ç', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'õ', 'ø', 'ý', 'ÿ', '€');
    
    /* zu diese Zeichen (beliebig erweiterbar) */
    $array_nach = array('ü', 'ä', 'ö', 'Ö', 'ß', 'à', 'á', 'â', 'ã', 'ù', 'ú', 'û', 'Ù', 'Ú', 'Û', 'Ü', 'ò', 'ó', 'ô', 'è', 'é', 'ê', 'ë', 'À', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Î', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ø', 'å', 'æ', 'ç', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'õ', 'ø', 'ý', 'ÿ', '€');
    
    $zaehlen=$show;
    $ergebnis_count=mysql_query($zaehlen);
    $num_rows = mysql_num_rows($ergebnis_count);
    echo "<br>Anzahl der Tabellen: ".$num_rows."<br>";
    
    $anzahl=0;
    
    while($show = mysql_fetch_object($ergebnis))
    {
    $anzahl++;
    echo "<br>".$anzahl.". Tabelle: ".$show->$qry;
    $db_table=$show->$qry;
    
    $query = "SHOW COLUMNS FROM `".$db_table."`"; // Query zur Ermittlung der Tabellenfelder
    $result = mysql_query($query); // Query ausführen und Ergebnis in $result schreiben
    if (mysql_errno() != 0){ echo mysql_error(); } // Gab es bei der Abfrage einen Fehler? Wenn ja, dann ausgeben
    else { $num = mysql_numrows($result); } // Ermitteln wie viele Datensätze gefunden wurden
    echo "<br>Anzahl der Spalten: ".$num."<br>";
    
    if ($num > 0){
    $query_update = "UPDATE ".$db_table." SET "; // Generiere Update-Query
    for($i=0;$i<$num;$i++){ // Durchlaufe Feldnamen
    $fieldname = mysql_result($result,$i,"Field");
    for($x=0;$x<sizeof($array_von);$x++){ // Durchlaufe Ersetzungen
    $query_update .= "`".$fieldname."`=REPLACE(".$fieldname.", '".$array_von[$x]."', '".$array_nach[$x]."')";
    if ((sizeof($array_von)-1) != $x){
    $query_update .= ", ";
    }
    else if (($num-1) != $i){
    $query_update .= ", ";
    }
    else if (($num-1) == $i){
    $query_update .= ";";
    }
    }
    }
    mysql_query($query_update);
    if (mysql_errno() != 0){ echo mysql_error(); }
    
    else {
    echo "------------- OK ------------- \n Betroffene Datensätze: ".mysql_affected_rows()."\n------------------------------ \n "; $all_affected_rows=$all_affected_rows+mysql_affected_rows(); }
    }
    }
    echo "------------- OK ------------- \n insgesamt betroffene Datensätze: ".$all_affected_rows."\n------------------------------ \n ";
    ?>
    </body>
    </html>
    Die Seite, welche dadurch generiert wird, zeigt eben nur "UTF-8" als Text an, der Quelltext davon sieht so aus:

    Code:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    </head>
    <body>
    UTF-8
    Ich habe jetzt lange rumprobiert, aber das Skript läuft nicht so, wie es sollte. Was kann ich tun?

  • #2
    Link zum ursprünglichen Beitrag: https://forum.vbulletin.com/forum/fo...ch-dargestellt

    Wenn auf der Seite überhaupt nichts erscheint, dann stimmt denke ich was mit der DB-Anbindung (Passowrt, Benutzername,...).

    Du kannst als Test mal ein echo nach ?php und dann ein anderes nach
    mysql_select_db($db_name,$db) or die(mysql_error());

    So kannst Du zumindest sehen wie weit das Script ausgeführt wird.



    Comment


    • #3
      Mal abgesehen davon, dass
      Code:
      $string = utf8_encode($string);
      keinen Sinn macht, gibt
      Code:
      echo mb_internal_encoding();
      das UTF-8 aus.

      Danach verabschiedet sich das Script vermutlich mit einem Gruß ans error.log, da mysql_ unter php7 nicht mehr deprecated ist, sondern error ausgibt. Baue es auf mysqli um, da sollte es funktionieren.

      Comment


      • #4
        Die langfristige Lösung besteht darin, Ihre Datenbank in UTF8MB4 zu konvertieren. Im Ordner do_not_upload / dbtools in Ihrem vBulletin-Downloadpaket finden Sie entsprechende Tools. Die Anweisungen finden Sie im Artikelabschnitt hier:




        The long term solution is to convert your database to UTF8MB4. There are tools to do this in the do_not_upload/dbtools folder in your vBulletin download package. The instructions are in the article section here:

        vBulletin 5 Database Tools - vBulletin Community Forum
        Translations provided by Google.

        Wayne Luke
        The Rabid Badger - a vBulletin Cloud demonstration site.
        vBulletin 5 API

        Comment


        • #5
          Okay, Danke, die Umwandlung werde ich mir beizeiten anschauen.

          Comment


          • #6
            Du meinst wohl die PHAR-Dateien. Aber wie führe ich die aus?

            Comment


          • #7
            Danke, ich schaue mir das gerade an. Von meinem Hoster kriege ich wohl keinen SSH-Zugriff.

            Comment


            • #8
              Originally posted by Wayne Luke View Post
              Die langfristige Lösung besteht darin, Ihre Datenbank in UTF8MB4 zu konvertieren. Im Ordner do_not_upload / dbtools in Ihrem vBulletin-Downloadpaket finden Sie entsprechende Tools. Die Anweisungen finden Sie im Artikelabschnitt hier:
              vBulletin 5 Database Tools - vBulletin Community Forum
              Hallo. Ich habe es genau so gemacht wie in dieser DBTools-Anleitung geschrieben, aber an den Umlauten hat sich nix geändert, doch jetzt ist der Admin-Bereich zerschossen, die Menus sind nur noch mit Variablen beschriftet und alle Schaltflächen ausser "Zurücksetzen" sind leer...Was mache ich falsch? Ich habe ein Backup der Datenbank.

              Comment


              • #9
                • What is the exact character set and collation of your database tables?
                • What is the database
                • connection character of your database?
                • What is the HTML Character Set and Locale specified for your language in AdminCP?
                • Does the issue affect new content
                • created?
                Translations provided by Google.

                Wayne Luke
                The Rabid Badger - a vBulletin Cloud demonstration site.
                vBulletin 5 API

                Comment


                • #10
                  Hi Wayne,

                  Originally posted by Wayne Luke View Post
                  • What is the exact character set and collation of your database tables?
                  "DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci"

                  [*]What is the database[*]connection character of your database?[*]What is the HTML Character Set and Locale specified for your language in AdminCP?
                  How do I look this up?

                  [*]Does the issue affect new content[*]created?
                  Can't test it right now, as the forum is in shambles.

                  Comment

                  widgetinstance 262 (Related Topics) skipped due to lack of content & hide_module_if_empty option.
                  Working...
                  X