Puhmuckel: Unicode Registered Zeichen kollidiert mit griechisch.

Guten Morgen,

ich kopiere und Füge aus einem übersetzten Word Dokument griechisch in phpmyadmin ein und speichere es als unicode utf-8 in einer mysql DB V4.0.20a. Dabei ergibt sich bei den Produktnamen folgendes Problem.

Im Word ist ein Produkt so geschrieben. produktname®. Dabei ist das ® aber höher gestellt. Ich markiere den Text also im Word Dokument und füge ihn in phpmyadmin ein. Der speichert diesen. Im Textfeld ist das ®-Zeichen nicht mehr höhergestellt.

Wenn ich nun den Inhalt der DB ausgebe (alle Seiten in UTF-8) sieht es auch ganz gut aus. Doch überall wo das höhergestellte ®-Zeichen im Worddokument ist, ist nun ein schwarzes Quadrat plus das ®-Zeichen zu sehen. Außerdem gibt es ein Zeichen auf griechisch, das wie ein kleines "n" aussieht wobei das rechte "Bein" vom "n" länger ist. Dieser "Buchstabe" wird auf der html Seite ebenfalls ständig durch ein schwarzes Quadrat plus ®-Zeichen ersetzt.

Das Problem macht mich wahnsinng. Sitze da nun schon wieder ein paar Tage dran. Habe sämliche Foren nach diesem Problem abgeklappert.

Habe das kopierte ®-Zeichen auch schon aus de DB gelöscht und es mit der Character Map von Windows 200 einzufügen versucht. Das selbe Problem tritt auf.

Weiß jemand Rat ?

Danke

  1. Hallo,

    muss noch dazu erwähnen, dass ich die gesamte Ausgabe der DB immer durch folgende FUnktion jage:

    function returnHTMLCompatible($input)
        {
     $reg = "<span style="vertical-align: 0.15em; font-size: 0.9em;">&reg;</span>";
            if(is_array($input)) {
                foreach($input as $key => $value) {
                    if (is_array($value)) {
             /* recursive call to test whether the array is still multidim or not */
                     $input[$key] = $this->returnHTMLCompatible($value);
                 } else {
            //$value = htmlspecialchars($value);
              $value = ereg_replace('&', "&amp;", $value);
                       $value = ereg_replace('estt®', "est<span style="text-decoration: underline;">c</span>®", $value);
              $value = ereg_replace('®', $reg, $value);
              $value = nl2br($value);
                        $input[$key] = $value;
              }
                }
            } else {
        $input = ereg_replace('&', "&amp;", $input);
        $value = ereg_replace('est®', "est<span style="text-decoration: underline;">c</span>®", $input);
                $value = ereg_replace('®', $reg, $input);
                $value = nl2br($input);
    }
            return $input;
    }

    Es scheint ich bekomme die Höherstellung des Registered Zeichens nicht raus und der Browser weiß nicht wie er es darstellen soll.
    Die Funktion suche nun nach dem Registered Zeichen um des abzuändern und wieder in den Text einzufügen. Läuft bei Unicode da etwas anderes ab. ich habe andere Texte in der DB als Western Latin gespeichert und klappt alles ausgezeichnet.

    1. Ich markiere den Text also im Word Dokument und füge ihn in phpmyadmin ein. Der speichert diesen. Im Textfeld ist das ®-Zeichen nicht mehr höhergestellt.

      Und wo genau ist da nun die Verwandlung in utf-8? Im phpmyadmin-Formular?

      Doch überall wo das höhergestellte ®-Zeichen im Worddokument ist, ist nun ein schwarzes Quadrat plus das ®-Zeichen zu sehen.

      Und wo ist das <span>, das Du ja eigentlich mit nachfolgender Funktion einfügen wolltest? Wie sieht denn der fertige Code aus? Und was ist "ein scharzes Quadrat"? Speichere die Seite und lese den Zeichenwert mit einem Hexviewer aus. Prüfe die anderen Sonderzeichen, stehen Umlaute und dergleichen mit zwei Bytes in der Datei? Oder wandelst Du alles mit htmlentities() um? Dann dürfte das ® überhaupt nicht im Code vorkommen.

      function returnHTMLCompatible($input)
          {
      $reg = "<span style="vertical-align: 0.15em; font-size: 0.9em;">&reg;</span>";
              if(is_array($input)) {
                  foreach($input as $key => $value) {
                      if (is_array($value)) {
                          $input[$key] = $value;
                }
                  }
              } else {

      Sei doch so gut und bringe etwas Ordnung in dieses Chaos. Mag ja sein, dass Du Dich darin zurecht findest, andere Leute haben hingegen Schwierigkeiten, fremden Code zu lesen, bei dem jede Zeile nach dem Zufallsprinzip eingerückt wurde. Von der ein oder anderen Funktionsbeschreibung mal ganz zu schweigen.

      $input = ereg_replace('&', "&amp;", $input);
          $value = ereg_replace('est®', "est<span style="text-decoration: underline;">c</span>®", $input);
          $value = ereg_replace('®', $reg, $input);
          $value = nl2br($input);
      }
              return $input;
      }

      Kannst Du diese Zeilen mal erklären? Für mich sieht das so aus, als wenn Du ein neues Auto erst in blau, dann in rot, dann in grün bestellen lässt und am Ende ein Fahrrad kaufst.

      Es scheint ich bekomme die Höherstellung des Registered Zeichens nicht raus

      Bei dem Code kein Wunder.