kostenloser Webspace werbefrei: lima-city


Text in Tabelle in Klartext übersetzen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Hallo, in einer Datenbanktabelle für eine Klartextsuche liegen kryptische Texte. Die Tabelle selbst liegt in MyISAM latin1_swedish_ci vor. Unten ist ein Beispieleintag aus dieser Tabelle. Ich möchte gerne stichprobenartig schauen, was dort für Texte stehen, dazu würde ich den Text aber gern in Klartext betrachten. Da gibt es doch sicher Übersetzer dafür. Finde aber nichts wenn ich nach MyISAM Translator google. Kennt vielleicht jemand einen solchen Übersetzer?

    beispiel-text mitu800 einer apfel verknu8c3bcpfung zuru800 seite apfel kategorie pflanzen


    Edit: Ich habe hier zwei gefunden, aber das klappt nicht von latin1 auf utf8 zu übersetzen, zumindest nicht den Beispieltext.
    http://www.motobit.com/util/charset-codepage-conversion.asp
    http://i-tools.org/charset/exec

    Direkt in phpMyAdmit geht das irgendwie auch nicht
    SELECT CONVERT( si_text
    USING utf8 )
    FROM `searchindex`

    Vielleicht kennt ihr noch andere Tools oder Befehle, mit denen das klappt? Das ist doch Latin1 verknu8c3bcpfung = verknüpfung hoffe ich, google findet zu "u8c3bc" rein gar nichts ^^?

    Beitrag zuletzt geändert: 1.6.2012 18:31:52 von pixilab
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich hab das so gelöst das ich dann einfach beim in die Tabelle schreiben die zeicehn in html-kürzel umwandle und danach zurückwandle, oder im Browser einfach ausgebe.
  4. pixilab schrieb:
    Vielleicht kennt ihr noch andere Tools oder Befehle, mit denen das klappt? Das ist doch Latin1 verknu8c3bcpfung = verknüpfung hoffe ich, google findet zu "u8c3bc" rein gar nichts ^^?
    Es ist genau genommen UTF-8. Denn u8c3bc steht wohl für %C3%BC, was ein "ü" ergibt. Du hast also zwei Byte( 11000011 10111100 ) in UTF-8. ( Also ein ¼ in ISO-8859-1, auch bekannt als latin-1, wo ein ü ein U+00FC [ 00000000 11111100 ] wäre ) Wie
    echo "\xC3\xBC";
    zeigt. Die Aufgabe ist nun also, dir über eine RegEx wie
    /u8([0-9a-f]{2,5})/g
    immer den jeweiligen Text aus der Datenbank zu holen, diesen zu übersetzen und dann in der Datenbank zu ersetzen. Ich bezweifel, dass SQL da eine fertige Funktion für hat, da das recht clumsy eingebettet zu sein scheint.

    Aber das ist nur eine Vermutung. Um das ganze komplett und genau sagen zu können, wären natürlich noch weitere Beispiele notwendig.

    PS: Ich habe mal was wie
    $text = preg_replace("/u8(([A-Fa-f0-9]{2}){2})/Usi", "\x\\1\x\\2", $string);
    probiert, was nicht das gewünschte Ergebnis brachte. Aber vielleicht kann man darauf ja was aufbauen.
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ein Script das dir das umrechnet:
    <?php
    
    header('content-type: text/plain; charset=utf-8');
    
    function unicode($byte) {
    	if(strlen($byte) == 2)
    		return chr('0x' . $byte);
    	$b1 = substr($byte, 0, 2);
    	$b2 = substr($byte, 2);
    	return chr('0x' . $b1) . chr('0x' . $b2);
    }
    
    $data = 'beispiel-text mitu800 einer apfel verknu8c3bcpfung zuru800 seite apfel kategorie pflanzen';
    $command = 'unicode(stripslashes(\'\\1\'))';
    
    $data = preg_replace('/u8([A-Fa-f0-9]{2,4})/sie', $command, $data);
    
    echo($data);
    
    ?>
  6. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Hätte nicht gedacht, dass das Übersetzen so aufwändig sein würde. Danke für eure Mühe :)

    Beitrag zuletzt geändert: 3.6.2012 10:13:36 von pixilab
  7. Tatsächlich sind das alles nur Workarounds, die sehr Fehleranfällig sind. Denn: Was passiert, wenn da texte wie "u800ber", oder allgmein um text etwas wie u8baba stehen sollen? Anhand der begrenzten Informationen die du geliefert hast, ist es allerdings das einzige, wie man das imho lösen kann.

    Schöner wäre es ggf. nur möglich, wenn man einen DB-Dump ggf. ohne das ganzen transfoo'ed Zeugs hat. Denn ich weiß nicht, ob das eventuell nur ein Ausgabefehler ist. Vielleicht ist auch die Annahme falsch, dass es sich dabei um UTF-8 handelt. Vielleicht handelt es sich bei u8c3bc auch um \x08\xc3\xbc und demnach bei u800 um \x08\x00. Vielleicht hat hackyourlife auch Ahnung davon, auf welchem Standard u8c3bc beruht. ( Ich habe das ehrlich gesagt noch nie gesehen. ) Auf jeden fall scheint seine Lösung zu funktionieren.

    Im Grunde brauchst du dir also nur alle Daten aus der Datenbank via "SELECT * FROM `table`" zu holen, es zu einem Array machen und dann in einer foreach-Schleife zeile für zeile umzuwandeln und dann in der Tabelle zu ersetzen oder an eine neue Stelle schreiben. Der Aufwand ist da relativ gering.

    Für näheres müsstest du es dann halt näher erläutern.
  8. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kelserific schrieb:
    Tatsächlich sind das alles nur Workarounds, die sehr Fehleranfällig sind. Denn: Was passiert, wenn da texte wie "u800ber", oder allgmein um text etwas wie u8baba stehen sollen?
    Tja, wenn es eine echte Norm ist (gehen wir mal davon aus), dann müsste ein
    u8
    das als Text vorkommt durch ein
    u875
    ersetzt werden, damit es keinen Konflikt gibt. Das ist natürlich nur dann der Fall, wenn es sich um eine echte Zeichencodierung handelt.

    Allerdings sieht es irgendwie nicht sinnvoll aus, dass auch
    u800
    vorkommt, was zum
    \0
    -Zeichen übersetzt wird.

    Übrigens gibt es tatsächlich eine Norm die so ähnlich aussieht:
    \uc3bc
    für ein "ü". Das nennt sich "ASCII Escaped Unicode"...

    Der gesamte DB-Dump wäre hilfreich um zu sehen ob es sich nur um einen Ausgabefehler handelt oder ob das eine Zeichencodierung ist.
  9. hackyourlife schrieb:
    kelserific schrieb:
    Tatsächlich sind das alles nur Workarounds, die sehr Fehleranfällig sind. Denn: Was passiert, wenn da texte wie "u800ber", oder allgmein um text etwas wie u8baba stehen sollen?
    Tja, wenn es eine echte Norm ist (gehen wir mal davon aus), dann müsste ein
    u8
    das als Text vorkommt durch ein
    u875
    ersetzt werden, damit es keinen Konflikt gibt. Das ist natürlich nur dann der Fall, wenn es sich um eine echte Zeichencodierung handelt.
    Kommt halt darauf an, wo der Indikator liegt. Mit irgendeiner transfoo'ed'en Ausgabe kann man wenig dazu sagen.

    hackyourlife schrieb:
    Allerdings sieht es irgendwie nicht sinnvoll aus, dass auch
    u800
    vorkommt, was zum
    \0
    -Zeichen übersetzt wird.
    Nun, aber
    \800
    wäre vielleicht mehr oder weniger sinnvoll. Oder wenn man Latin1 zu UTF-8 übersetzt, indem man alles OR 64, nimmt. ( Was - ich überschlage nur - wenn ich mich nicht irre zu einem @ bei u800 führt. An so begrenzten Informationen lässt sich halt nicht wirklich eine umfassende Übersetzung anfertigen.

    hackyourlife schrieb:
    Übrigens gibt es tatsächlich eine Norm die so ähnlich aussieht:
    \uc3bc
    für ein "ü". Das nennt sich "ASCII Escaped Unicode"...
    Das würde durchaus Sinn machen. Ich kenne die Norm nicht. Aber ich bin nicht allwissend. Ich habe halt aus dem "C3BC" auf den entsprechenden Wert geschlossen. Wobei "\u8" natürlich für "UTF-8" stehen könnte. Wäre allerdings schön, wenn man weiß, ob es richtig war. Bei PHP würde vielleicht ein addslashes() vor der Ausgabe ein wenig Aufschluss darüber geben, wie die Ausgabe wirklich lautet. ( Aber wer weiß, ob das nicht schon angewandt wurde!? )

    Kurzum: Wenn es funktioniert: Schön. Wenn nicht, liegt es an den mangelnden Informationen, die gegeben wurden.
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!