# ASCII-Code in einem String umwandeln



## visiondpc (21. November 2007)

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.


----------



## CraisiePrinzZ (21. November 2007)

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.


----------



## visiondpc (21. November 2007)

Stimmt, aber was ist das dann für ein Format?


----------



## CraisiePrinzZ (21. November 2007)

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.


----------



## MiNiMaG (21. November 2007)

Vermutlich was Adobe-Eigenes. Versuch doch einfach mal ein +14 vor der Umwandlung. Vielleicht klappts ja bei den restlichen Zeichen auch


----------



## visiondpc (21. November 2007)

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);


----------



## maeTimmae (21. November 2007)

Mit einer standardmäßigen Verschiebung würde es so funktionieren:

```
<?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
$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]


----------



## visiondpc (21. November 2007)

Danke aber es ist wirklich eine unregelmäßige Verschiebung. Da bleibt wohl nur der harte Weg.


```
$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);
}
```


----------

