ASCII-Code in einem String umwandeln

visiondpc

Erfahrenes Mitglied
Hallo,

ich habe ein Problem mit einer Funktion, die mir den Inhalt einer PDF-Datei als String ausgibt. Leider werden alle Umlaute und ähnliches im ASCII-Format angezeigt.
Förderung sieht dann beispielsweise so aus: F232rderung
Gibt es eine Möglichkeit das umzuformatieren?
Ich hab schon überlegt, das über reguläre Ausdrücke rauszusuchen aber dann keine Funktion gefunden, die mir die ASCII Codes umwandelt.
Die Möglichkeit, dass auch gewollte Zahlenkombinationen umgewandelt werden kann dabei vernachlässigt werden, da es nur um eine Funktion geht, die innerhalb von PDF's nach eingegebenen Stichworten sucht.
 
ASCII Zeichen kann man mit Hilfe der Funktion chr( int ASCII-Code ); umwandeln. Ich habe es aber mit 232 ausprobiert und es kommt jedoch kein ö heraus, denn das kleine ö wäre 246.
 
Tut mir leid, das kann ich dir leider auch nicht sagen, aber du könntest ja mal nachschauen, ob alle anderen Zeichen auch um 14 verschoben sind zum Beispiel. Vielleicht gibt es da ja irgendeine standardmäßige Verschiebung, aus welchen Gründen auch immer.
 
Vermutlich was Adobe-Eigenes. Versuch doch einfach mal ein +14 vor der Umwandlung. Vielleicht klappts ja bei den restlichen Zeichen auch
 
Das wäre natürlich eine Lösung. Könnte mir da mal schnell jemand mit dem reg. Ausdruck auf die Sprünge helfen?
Meiner tuts nicht aber für mich sind das auch ehrlichgesagr böhmische Dörfer.

preg_replace("/0-9{3}/", "chr($1+14)", $this->pdf_str);
 
Mit einer standardmäßigen Verschiebung würde es so funktionieren:
PHP:
<?php
$string = "F232rderung";
$string = preg_replace_callback("%([0-9]{3})%Uis",
                create_function(
                        '$value',
                        'return chr($value[1] - 200);'
                    ),
                $string
            );
Ein "ö" hat in meiner ASCII-Tabelle zumindest den Wert 148 und nicht den Ansi-Code 246... Naja, Modifikation sollte nicht allzu schwer sein.
Sofern es keine Verschiebung gibt, könnte man auch das hier verwenden:
PHP:
<?php
$string = "F232rderung";
$string = preg_replace_callback("%([0-9]{3})%Uis",
                'chr',
                $string
            );

Im Falle einer irregulären Verschiebung reicht ein Array mit zu ersetzenden Werten und die Verwendung von [phpf]str_repace[/phpf] ;)
 
Danke aber es ist wirklich eine unregelmäßige Verschiebung. Da bleibt wohl nur der harte Weg.

PHP:
$this->replace_uml = array("212"=>"ä", "322"=>"\"", "232"=>"ö", "237"=>"ü", "343"=>"\"", "247"=>"ss");
foreach($this->replace_uml as $key=>$replace)
{
	$this->pdfdocument = str_replace($key, $replace, $this->pdfdocument);
}
 
Zurück