# PHP als Dolmetscher (mysql=utf8;webseite=iso-8859-1)[solved]

## schmidicom

Hallo,

ich habe hier ein massives Problem das ich, egal wie viele Tage ich noch im Googel suche und meine aggro an leblosen Objekten auslasse, nicht lösen kann.

 :Crying or Very sad:   :Crying or Very sad:   :Crying or Very sad:   :Crying or Very sad:   :Crying or Very sad:   :Crying or Very sad: 

Situation:

Ich habe eine auf PHP basierende Webseite um genau zu sein ein eqdkp das ums verrecken kein utf8 verstehen will, was mich auch nicht stören würde. Aber die MySQL DB spricht nun mal utf8 und der bring ich auch nichts anderes bei. Dafür laufen mir inzwischen schon zu viele andere Anwendungen dessen reibungslosen Betrieb ich nicht stören will.

Problem:

Wenn in eqdkp etwas mit Sonderzeichen eingegeben wird bricht der dritte Weltkrieg aus.

Gibt es eine Möglichkeit PHP als Dolmetscher zu benutzen damit eqdkp und MySQL sich wieder vertragen?

Bitte ich bin bald am abdrehen wegen diesem Mist und brauche Hilfe. Wie gesagt habe ich nun schon so viel Zeit im Google verbracht das ich aufgehört habe zu zählen und dennoch keine Brauchbare Lösung ausser der einen das man MySQL auf die selbe Sprache einstellen soll jedoch werden mir dann unter Garantie alle anderen Programme die eine SQL Datenbank brauchen nicht Danke sagen.Last edited by schmidicom on Sat Sep 29, 2007 10:36 am; edited 1 time in total

----------

## musv

Keine Ahnung, was eqdkp ist. Aber wenn ich Webseiten mit iso und MySQL mit UTF benutze oder umgekehrt, verwende ich die PHP-Befehle utf8_encode und utf8_decode.

----------

## schmidicom

 *musv wrote:*   

> Keine Ahnung, was eqdkp ist. Aber wenn ich Webseiten mit iso und MySQL mit UTF benutze oder umgekehrt, verwende ich die PHP-Befehle utf8_encode und utf8_decode.

 

Das musste dann wohl in den .php Dateien von eqdkp angewendet werden jedoch stammt das ding nicht von mir. Ich habe zwar leichte C++ Kentnisse aber im PHP-Code kenne ich mich nicht aus.

Mir wäre es lieber wenn es eine Option in php.ini geben würde die das erledigen kann, nur habe ich dort bis jetzt noch nichts gefunden.

----------

## musv

 *schmidicom wrote:*   

> 
> 
> Das musste dann wohl in den .php Dateien von eqdkp angewendet werden jedoch stammt das ding nicht von mir. Ich habe zwar leichte C++ Kentnisse aber im PHP-Code kenne ich mich nicht aus.

 

PHP ist ziemlich ähnlich zu C++ (welche Programmiersprache ist das nicht...). Damit solltest du eigentlich relativ schnell klarkommen. Und ja, du müßtest halt die Befehle mysql_query, mysql_fetch_row und mysql_fetch_array suchen, und dann entsprechend nach Schreiben oder Lesen zu utf8 kodieren oder dekodieren. Kann ziemlich in Arbeit ausarbeiten, wenn der Quelltext hinreichend groß, undokumentiert und unstrukturiert ist.

 *schmidicom wrote:*   

> 
> 
> Mir wäre es lieber wenn es eine Option in php.ini geben würde die das erledigen kann, nur habe ich dort bis jetzt noch nichts gefunden.

 

In der php.ini ist mir da nichts bekannt. PHP orientiert sich normalerweise an der Kodierung der Webseite (denk ich zumindest). Also das, was im Header steht. Eventuell könntest du da das iso durch ein utf-8 ersetzen. Könnte unter Umständen was bringen.

----------

## schmidicom

Habe inzwischen in der php.ini das hier rein geschrieben:

```
default_charset = "UTF-8"
```

jedoch hat dies nur die Wirkung das Sonderzeichen zwar richtig angezeigt werden jedoch wenn jemand welche in eine Textzeile schreibt und das speichern will (So wie im Forum) dann wird alles mit und ab dem Sonderzeichen abgeschnitten.

Kann es sein das nun der output von PHP stimt aber der input in die MySQL nicht?

Den Quellcode von den php Dateien umzuschreiben dauert wirklich zu lange, und wie gesagt ich bin was C++ angeht immer noch ein blutiger Anfänger. Und die Dokumentationen zu eqdkp sind nicht wirklich zu gebrauchen.

----------

## Anarcho

Versuch mal die Stelle zu finden wo mysql_connect bzw. mysql_pconnect aufgerufen wird. Schreibe da mal direkt danach foldendes rein:

```
mysql_query('SET NAMES iso-8859-15;');

mysql_query('SET CHARACTER SET iso-8859-15;');
```

oder falls das nichts bringt mal testweise: 

```
mysql_query('SET NAMES utf8;');

mysql_query('SET CHARACTER SET utf8;');
```

----------

## schmidicom

 *Anarcho wrote:*   

> Versuch mal die Stelle zu finden wo mysql_connect bzw. mysql_pconnect aufgerufen wird. Schreibe da mal direkt danach foldendes rein:
> 
> ```
> mysql_query('SET NAMES iso-8859-15;');
> 
> ...

 

Leider nichts gefunden, hab ein Suchprogramm laufen lassen das in allen Dateien danach sucht. Was ich aber gefunden habe sind zwei Dateien die im Namen mysql haben.

ftp://schmidicom.dyndns.org/pub/mysql.php

ftp://schmidicom.dyndns.org/pub/mysql_info.php

Aber auch da habe ich nichts gefunden was mir weiterhelfen würde aber wie gesagt kenne ich mich da auch nicht aus.

----------

## Anarcho

 *schmidicom wrote:*   

>  *Anarcho wrote:*   Versuch mal die Stelle zu finden wo mysql_connect bzw. mysql_pconnect aufgerufen wird. Schreibe da mal direkt danach foldendes rein:
> 
> ```
> mysql_query('SET NAMES iso-8859-15;');
> 
> ...

 

Womit willst du denn gesucht haben???

Schon in deiner ersten Datei sind "mysql_connect" und "mysql_pconnect" zu finden ...

Änder das mal in folgendes:

```
function sql_db($dbhost, $dbname, $dbuser, $dbpass='', $pconnect = false)

    {

        $this->pconnect = $pconnect;

        $this->dbhost = $dbhost;

        $this->dbname = $dbname;

        $this->dbuser = $dbuser;

        $this->dbpass = $dbpass;

        

        if ( $this->pconnect )

        {

            if ( empty($this->dbpass) )

            {

                $this->link_id = @mysql_pconnect($this->dbhost, $this->dbuser);

            }

            else

            {

                $this->link_id = @mysql_pconnect($this->dbhost, $this->dbuser, $this->dbpass);

            }

        }

        else

        {

            if ( empty($this->dbpass) )

            {

                $this->link_id = @mysql_connect($this->dbhost, $this->dbuser);

            }

            else

            {

                $this->link_id = @mysql_connect($this->dbhost, $this->dbuser, $this->dbpass);

            }

        }

        

        if ( (is_resource($this->link_id)) && (!is_null($this->link_id)) && ($this->dbname != '') )

        {

            if ( !@mysql_select_db($this->dbname, $this->link_id) )

            {

                @mysql_close($this->link_id);

                $this->link_id = false;

            }

            // here the code for charset settings

            // ----------------------------------------

            mysql_query('SET NAMES iso-8859-15;');

            mysql_query('SET CHARACTER SET iso-8859-15;');

            // ----------------------------------------

            // end of charset mapping

            return $this->link_id;

        }

        else

        {

            return false;

        }

    }
```

----------

## schmidicom

Oh man ich bin wirklich durch.

Hab mit Windows und Linux gesucht aber beide sagten das sie es nicht gefunden hätte tut mir echt Leid ich hätte mich nicht blind darauf verlassen sollen.

----------

## schmidicom

 *Anarcho wrote:*   

> Versuch mal die Stelle zu finden wo mysql_connect bzw. mysql_pconnect aufgerufen wird. Schreibe da mal direkt danach foldendes rein:
> 
> ```
> mysql_query('SET NAMES iso-8859-15;');
> 
> ...

 

Hat nicht geholfen habe es genau da rein geschrieben wo du gesagt hast aber immer noch das selbe. Sobald in einem Textfeld etwas mit Sonderzeichen rein geschrieben wird speichert es nur das was vor dem Sonderzeichen kam alles andere wird abgeschnitten.

----------

## Anarcho

Welches Character Encoding wird denn an den Browser gesendet?

Zeig dochmal die Header, z.b. mit:

wget 'http://www.website.de' -S -O - >/dev/null

----------

## 69719

```

for i in language/*/lang_main.php; do cat $i | sed 's/iso-8859-1/utf-8/g' > $i.new && mv $i.new $i; done

```

----------

## schmidicom

 *Anarcho wrote:*   

> Welches Character Encoding wird denn an den Browser gesendet?
> 
> Zeig dochmal die Header, z.b. mit:
> 
> wget 'http://www.website.de' -S -O - >/dev/null

 

Hier der die Ausgabe:

```
--12:42:04--  http://schmidicom.dyndns.org/eqdkp-Plus_v0.4.4.5_core/eqdkp/

           => `-'

Auflösen des Hostnamen »schmidicom.dyndns.org«.... 85.1.172.16

Verbindungsaufbau zu schmidicom.dyndns.org|85.1.172.16|:80... verbunden.

HTTP Anforderung gesendet, warte auf Antwort...

  HTTP/1.1 302 Found

  Date: Sat, 29 Sep 2007 10:42:05 GMT

  Server: Apache

  X-Powered-By: PHP/5.2.4_pre200708051230-pl2-gentoo

  Set-Cookie: herefirst=yes

  Location: ./install.php

  Content-Length: 34

  Keep-Alive: timeout=15, max=100

  Connection: Keep-Alive

  Content-Type: text/html; charset=UTF-8

Platz: ./install.php[folge]

--12:42:05--  http://schmidicom.dyndns.org/eqdkp-Plus_v0.4.4.5_core/eqdkp/install.php

           => `-'

Wiederverwendung der bestehenden Verbindung zu schmidicom.dyndns.org:80.

HTTP Anforderung gesendet, warte auf Antwort...

  HTTP/1.1 200 OK

  Date: Sat, 29 Sep 2007 10:42:05 GMT

  Server: Apache

  X-Powered-By: PHP/5.2.4_pre200708051230-pl2-gentoo

  Content-Length: 7144

  Keep-Alive: timeout=15, max=99

  Connection: Keep-Alive

  Content-Type: text/html; charset=UTF-8

Länge: 7.144 (7.0K) [text/html]

100%[====================================>] 7.144         --.--K/s

12:42:05 (366.68 KB/s) - »-« gespeichert [7144/7144]
```

Ich lese hier was von UTF-8 aber das ganze eqdkp ist in ISO-8859-1 erstellt worden und wenn ich mit Firefox drauf gehe zum einrichten sagt er mir das in den Seiteninformationen.

ftp://schmidicom.dyndns.org/pub/seiteninfo.bmp

EDIT:

Habe in der php.ini das <default_charset = "UTF-8"> wieder auskommentriert das ich da reingeschrieben habe und nun hat sich auch die Anzeige bei deinem Befehl verändert:

```
--13:32:56--  http://schmidicom.dyndns.org/eqdkp-Plus_v0.4.4.5_core/eqdkp/

           => `-'

Auflösen des Hostnamen »schmidicom.dyndns.org«.... 85.1.172.16

Verbindungsaufbau zu schmidicom.dyndns.org|85.1.172.16|:80... verbunden.

HTTP Anforderung gesendet, warte auf Antwort...

  HTTP/1.1 302 Found

  Date: Sat, 29 Sep 2007 11:32:56 GMT

  Server: Apache

  X-Powered-By: PHP/5.2.4_pre200708051230-pl2-gentoo

  Set-Cookie: herefirst=yes

  Set-Cookie: eqdkp_data=a%3A2%3A%7Bs%3A13%3A%22auto_login_id%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22user_id%22%3Bi%3A-1%3B%7D; expires=Sun, 28-Sep-2008 11:32:56 GMT; path=/

  Set-Cookie: eqdkp_sid=bef2bff711ce7cbddbf48aded9a35da7; path=/

  Location: http://schmidicom.dyndns.org/eqdkp-Plus_v0.4.4.5_core/eqdkp/viewnews.php

  Content-Length: 0

  Keep-Alive: timeout=15, max=100

  Connection: Keep-Alive

  Content-Type: text/html

Platz: http://schmidicom.dyndns.org/eqdkp-Plus_v0.4.4.5_core/eqdkp/viewnews.php[folge]

--13:32:57--  http://schmidicom.dyndns.org/eqdkp-Plus_v0.4.4.5_core/eqdkp/viewnews.php

           => `-'

Wiederverwendung der bestehenden Verbindung zu schmidicom.dyndns.org:80.

HTTP Anforderung gesendet, warte auf Antwort...

  HTTP/1.1 200 OK

  Date: Sat, 29 Sep 2007 11:32:57 GMT

  Server: Apache

  X-Powered-By: PHP/5.2.4_pre200708051230-pl2-gentoo

  Set-Cookie: herefirst=yes

  Set-Cookie: eqdkp_data=a%3A2%3A%7Bs%3A13%3A%22auto_login_id%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22user_id%22%3Bi%3A-1%3B%7D; expires=Sun, 28-Sep-2008 11:32:57 GMT; path=/

  Set-Cookie: eqdkp_sid=bef2bff711ce7cbddbf48aded9a35da7; path=/

  Expires: Mon, 26 Jul 1997 05:00:00 GMT

  Last-Modified: Sat, 29 Sep 2007 11:32:57 GMT

  Cache-Control: no-store, no-cache, must-revalidate

  Cache-Control: post-check=0, pre-check=0

  Pragma: no-cache

  Connection: close

  Content-Type: text/html; charset=iso-8859-1

Länge: nicht spezifiziert [text/html]

    [ <=>                                 ] 24.460        --.--K/s

13:32:57 (396.66 KB/s) - »-« gespeichert [24460]
```

Aber das Problem ist immernoch da.  :Crying or Very sad: 

 *escor wrote:*   

> 
> 
> ```
> 
> for i in language/*/lang_main.php; do cat $i | sed 's/iso-8859-1/utf-8/g' > $i.new && mv $i.new $i; done
> ...

 

Ich verstehe nicht ganz was ich damit soll, was macht das wozu ist es gut und wo gebe ich das ein?Last edited by schmidicom on Sat Sep 29, 2007 9:38 am; edited 2 times in total

----------

## 69719

Wechsel in einer console in das Hauptverzeichnis von eqdkp und gib den Befehl ein.

Damit änderst du das Encoding von iso-8859-1 auf utf-8.

----------

## schmidicom

 *escor wrote:*   

> Wechsel in einer console in das Hauptverzeichnis von eqdkp und gib den Befehl ein.
> 
> Damit änderst du das Encoding von iso-8859-1 auf utf-8.

 

Hab in nun gemacht es kam zwar keine Fehlermeldung aber verändert hat sich auch nichts. Immernoch das selbe Problem mit und ab einem Sonderzeichen wird alles abgeschnitten und kommt nicht in der DB an.

Ich habe ja selber auch nach einer Lösung gesucht und dabei das gefunden aber bei mir funktioniert diese änderung nicht. Was ähnliches hat mir ja auch Anarcho vorgeschlagen nur bleibt es ohne wirkung und ich verstehe nicht warum. Da muss doch etwas im PHP von Gentoo im Argen liegen und nicht in eqdkp.

http://forums.eqdkp.com/lofiversion/index.php/t2356.html

----------

## schmidicom

 :Very Happy:   :Very Happy:  LÖSUNG GEFUNDEN  :Very Happy:   :Very Happy: 

Ich habe die Lösung gefunden dank dieses Artikels http://gerstmann.net/content/view/88/2/lang,de/ bin ich auf die Idee gekommen einfach anstelle von:

```
mysql_query("SET NAMES 'utf8'");
```

das hier in die Datei mysql.php zu schreiben:

```
mysql_query("SET NAMES 'latin1'");
```

so wie es hier beschrieben ist:

http://forums.eqdkp.com/lofiversion/index.php/t2356.html

MySQL macht automatisch eine Konvertierung und liefert so die richtigen Informationen.

Mein Gott sowas muss man erst mal wissen.   :Shocked: 

----------

## Anarcho

```
mysql_query('SET NAMES iso-8859-15;'); 
```

hat nicht geholfen? Bzw. 8859-1?

----------

## schmidicom

 *Anarcho wrote:*   

> 
> 
> ```
> mysql_query('SET NAMES iso-8859-15;'); 
> ```
> ...

 

Nein hatte ich auch ausprobiert aber zeigte keine Wirkung genau wie wenn utf8 drin stand.

Auf der MySQL Homepage fand ich diese liste und da sind iso-8859-1 und iso-8859-15 nicht drauf.

```
+----------+-----------------------------+---------------------+

| Charset  | Description                 | Default collation   |

+----------+-----------------------------+---------------------+

| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |

| dec8     | DEC West European           | dec8_swedish_ci     |

| cp850    | DOS West European           | cp850_general_ci    |

| hp8      | HP West European            | hp8_english_ci      |

| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |

| latin1   | cp1252 West European        | latin1_swedish_ci   |

| latin2   | ISO 8859-2 Central European | latin2_general_ci   |

| swe7     | 7bit Swedish                | swe7_swedish_ci     |

| ascii    | US ASCII                    | ascii_general_ci    |

| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |

| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |

| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |

| tis620   | TIS620 Thai                 | tis620_thai_ci      |

| euckr    | EUC-KR Korean               | euckr_korean_ci     |

| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |

| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |

| greek    | ISO 8859-7 Greek            | greek_general_ci    |

| cp1250   | Windows Central European    | cp1250_general_ci   |

| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |

| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |

| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |

| utf8     | UTF-8 Unicode               | utf8_general_ci     |

| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |

| cp866    | DOS Russian                 | cp866_general_ci    |

| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |

| macce    | Mac Central European        | macce_general_ci    |

| macroman | Mac West European           | macroman_general_ci |

| cp852    | DOS Central European        | cp852_general_ci    |

| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |

| cp1251   | Windows Cyrillic            | cp1251_general_ci   |

| cp1256   | Windows Arabic              | cp1256_general_ci   |

| cp1257   | Windows Baltic              | cp1257_general_ci   |

| binary   | Binary pseudo charset       | binary              |

| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |

| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |

| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |

+----------+-----------------------------+---------------------+
```

latin1 ist drauf und zeigte die gewünschte Wirkung. Es sind noch andere iso-8859-* drauf aber ich bleibe jetzt mal lieber bei latin1 das klappt ja nun.  :Wink: 

----------

## Anarcho

Naja, ich war wenigstens nah dran  :Wink: 

----------

