Mit str_split auf ein UTF-8 kodierter string

Ich bin derzeit an einem Projekt arbeiten, und anstelle der Verwendung von regulären MySQL-Abfragen, die ich dachte, ich würde gehen Sie vor und lernen, wie Sie mit PDO.

Ich habe eine Tabelle namens Teilnehmer, sowohl die Datenbank, die Tabelle und alle Spalten sind in utf-8. Ich habe zehn Einträge in der Wettbewerber-Tabelle, und Ihre Spalte "name" enthält Zeichen wie åäö.

Nun, wenn ich fetch einen Eintrag aus der Datenbank, und var_dump der name, den ich zu einem guten Ergebnis kommen, wird ein string mit allen Sonderzeichen intakt. Aber was ich tun müssen, ist split die Zeichenfolge von Zeichen, um Sie in ein array, das ich dann mische.

Zum Beispiel habe ich diesen string:
Test ÅÄÖ Tåän

Und wenn ich laufen str_split ich bekomme jedes Zeichen in einem eigenen Schlüssel in einem array. Das einzige Problem ist, dass alle Sonderzeichen anzeigen wie diese: �, d.h. das array wird wie folgt sein:

Array
(
    [0] => T
    [1] => e
    [2] => s
    [3] => t
    [4] =>  
    [5] => 
    [6] => 
    [7] => 
    [8] => 
    [9] => 
    [10] => 
    [11] =>  
    [12] => T
    [13] => 
    [14] => 
    [15] => 
    [16] => 
    [17] => n
)

Wie Sie sehen können, ist es nicht nur vermasselt die Charaktere, aber auch Duplikate, die Sie in str_split Prozess. Ich habe versucht, mehrere Möglichkeiten zum aufteilen der Zeichenfolge, aber Sie haben alle das gleiche Problem. Wenn ich die Ausgabe der Zeichenfolge vor dem split, es zeigt die Sonderzeichen, die nur in Ordnung.

Dies ist mein dbConn.php code:

//Benötigen config-Datei:
require_once('config.inc.php');

//Start PDO connection:
$dbHandle = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf-8", $dbUser, $dbPass);
$dbHandle -> exec("SET CHARACTER SET utf8");

//Set error reporting:
$dbHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

- Und dies ist der code, den ich verwenden zum abrufen aus der Datenbank und Schleife:

//Require files:
require_once('dbConn.php');

//Get random artist:
$artist = $dbHandle->query("SELECT * FROM ".ARTIST_TABLE." WHERE id = 11 ORDER BY RAND() LIMIT 1");
$artist->setFetchMode(PDO::FETCH_OBJ);
$artist = $artist->fetch();
var_dump($artist->name);

//Split name:
$artistChars = str_split($artist->name);

Ich bin die Verbindung mit utf-8, meine php Datei ist utf-8 ohne BOM ist und keine anderen besonderen Zeichen, die auf dieser Seite teilen dieses Problem. Was könnte falsch sein, oder was mache ich falsch?

  • Sollte charset=utf8 " in der PDO Teil.
InformationsquelleAutor Jonathan | 2011-10-19
Schreibe einen Kommentar