Problem mit strstr & [gelöst] Zeichensatzproblem

Hallo zusammen.

Ich schreibe grade an meinem Newsscript, also das ich Einträge schreiben, editieren oder löschen kann.

Nun zeigt sich bisher aber ein gravierendes Problem.
Ich habe die Einträge in einer Datenbank gespeichert (Zeichensatz: ‘latin1_general_ci’), und muss diese in eine als UTF-8 kodierte Datei (Das Newsscript) auslesen.
Dabei entstehen jatzt natürlich immer dies Schönen ? Zeichen oder irgendein anderer Quark.
Hab auch schon Probiert, den Zeichensatz in der DB auf utf8_bin zu ändern, keine Änderung.

Da der Newseintrag in einem Textarea zum editiren ausgegeben wird, scheiden Entities aus.
Was kann ich tun, damit die Sachen korrekt abgespeichert werden, und auch korrekt ausgelesen werden?

Und warum verwendest du nicht ueberall die gleiche Kodierung?

Zwischen Kodierungen hin und her zu wechseln, ist immer unschoen und meist mit Nebenwirkungen verbunden; bis hin zum Verlust von Informationen, weil sich nicht alle Zeichen in jeder Kodierung abbilden lassen.

Wie und wo?

Meine Empfehlng waere, neu anzufangen - ueberall UTF-8 verwenden, und dann Daten neu eintragen.

Das klingt bloedsinnig.

Wenn Entities ausscheiden, dann weil UTF-8 existiert.

Zeichensatz geändert über:
phpMyAdmin -> news-Tabelle -> alle Relevanten Felder ausgewählt und Zeichensatz auf utf8_bin geändert.

Und Zeichensatz der Client-Verbindung fuer die Kommunikation zwischen PHP und MySQL ebenfalls angegeben?

Da bin ich mir jetzt nicht sicher. Wie nehme ich das vor?

mysql_set_charset

Danke, dann muss ich wohl mal hochladen, mein Xampp hat nur PHP 5.1.2 :smiley:

Naja, der Fallback fuer aeltere Version wird im Manual ja auch erwaehnt - allerdings nicht unbedingt empfohlen, da der sich ggf. noch woanders auswirken kann.

Ich glaube, da hat wer nen dickes Dankeschön verdient! Super!!

:bp:

So, habe jetzt nach einem langen Kampf endlich XAMPP 1.7 und PHP 5.2.8 drauff.

Doch jetzt spinnst htmlentities :smiley:

Und zwar habe ich folgenden Code:

// UTF-8 kodierte Datei

...

mysql_set_charset("utf8");

...

//$eintrag-> name kommt aus einer utf-8 kodierten datenbank
echo htmlentities($eintrag->name, ENT_QUOTES, "utf-8");

Sobald jetzt in $eintrag->name Umlaute enthalten sind, gibt htmlentities gar nichts mehr aus, in allen Fällen ohne Umlaute geht es aber prima…
Schreibe ich stattdessen iso-8859-1 oder ähnlich, gehts auch…

Und leider ist das andere Problem im Textarea seit der anderen Xampp Version auch wieder da…

Was willst du denn mit htmlentities, wenn du UTF-8 verwendest?
Fuer’s escaping HTML-eigener Sonderzeichen ist htmlspecialchars da.

Und was das Problem mit der Textarea eigentlich sein soll, hast du auch noch nicht beschrieben.

Das selbe wie vorher, da stehen wieder nur ?-Blöcke… :wink:

Dann laeuft in Sachen Zeichenkodierung wohl noch irgendwas falsch …

Wie sieht’s denn aus, wenn du die Daten ueber phpMyAdmin kontrollierst?
Der HTTP Content-Type-Header passt auch?

Problem gelöst!

Der Header stimmt, und bei hphMyAdmin war auch alles ok.

Ich hatte mysql_set_charset vor dem einbinden der Logklasse benutzt, wodurch sich der Aufruf dann auf die Klasse mit ihrer Verbindung bezog, nicht auf die DB-Verbindung für das Script… :stress:

Verwende jetzt auch htmlspecialchars, wobei die anfangs das selbe Problem hatte (nichts ausgab)

Thx chris. Ich poste demnächst nochmal nen paar Screenshots, da das für euch ja nicht zugänglich ist (Es sei den ihr schafft es, bei mir Admin zu werden ^^ :ps:)

:bp:

direkt nach dem mysql verbindungsaufbau (mysql_connect, evtl. mysql_select_db) folgenden query senden:

und die restlichen string manipulationen mit den multibyte funktionen machen (at2.php.net/mbstring)

den header natürlich nicht vergessen

und evtl noch den passenden meta tag

Hab ich alles.
Allerdings gibts jetzt nen Problem mit strstr:

$inhalt = wordwrap($eintrag->inhalt, 240, "<--|-->");
echo $inhalt;
$inhalt = strstr($inhalt, "<--|-->", true); // hier liegt der fehler
echo $inhalt; 
$inhalt = str_replace("<--|-->", "", $inhalt);
echo $inhalt;
$inhalt = trim($inhalt);
$inhalt .= "...";

Die echos dienen nur zum debuggen. beim ersten ist der str noch da, auch richtig geteilt durch “<–|-->”.
Ziel ist es, einen max. 240 Zeichen langen Teilstring mit ‘…’ am Endezu erhalten.

EDIT:

Hier noch die Fehlermeldung:

Warning: Wrong parameter count for strstr() in D:\Programme\xampp\htdocs\new_jw-lighting\news.php on line 262

RTFM …

Mit welcher PHP-Version wurde der dritte Parameter fuer strstr eingefuehrt, und welche nutzt du …?

:astonished:

ok, darauf habe ich jetzt nicht geachtet, aber nachgelesen habe ich schon ^^

gibts ne alternative, das zu erreichen, was ich haben will?
@michi: Ess soll ja nicht mitten im wort getrennt werden, sonst würd ich substr nehmen :wink:

at2.php.net/strpos

$inhalt = substr($inhalt, 0, strpos($inhalt, " ", 230)) . "...";

so?