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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
str_split
funktioniert nicht mit multi-byte-Zeichen enthält, wird nur das erste byte - damit ungültig Ihre Zeichen. könnten Siemb_split
.mb_ereg()
- Funktion, php.net/manual/en/function.mb-ereg.phpDaran, dass der utf-8-Deklaration verwendet im connect-string gemeldet wird, funktioniert nicht.
In den Kommentaren auf php.net ich Häufig sehen, diese alternative:
...;charset=utf8
UTF-8 Über PDO -
Probleme beim schreiben von internationalen (auch chinesische und Thailandic) Zeichen, die die Datenbank
möglicherweise gibt es weitere Möglichkeiten, diese Arbeit zu machen. Ich bin kein Experte, nur ein tech-freak, daran interessiert zu verstehen, all dies. In Linux und Windows ich habe ein paar CMS (content-managing-Systeme), mit einer Stichprobe aus der folgenden website:
'http://www.elated.com/articles/cms-in-an-afternoon-php-mysql'
Wird die Probe mit PDO für insert, update und delete.
Es dauerte ein paar Stunden um eine Lösung zu finden. Was immer ich auch Tat, habe ich immer abgeschlossen Unterschiede zwischen den Daten in meine Formulare und in die phpmyadmin/heidi -Ansichten
Folgte ich den Tipps der: 'https://mathiasbynens.be/notes/mysql-utf8mb4", aber da war immer noch kein Erfolg
In meinem CMS-Struktur gibt es eine Datei 'Config.php':
Nach der Lektüre dieser Webseite wechselte ich die Linie
zu
Jetzt alles Prima funktioniert.
Den
str_split
Funktion spaltet vom byte, nicht vom Charakter. Sie müssenmb_split
.diese Arbeit für mich... hoffe, von nutzen.
sicherzustellen, dass die Datenbank, apache und jede config war in utf8.
PDO OBJEKT
es funktionieren, wenn nicht mit einer anderen Funktion wie str_word_count.
MIT str_word_count Sie verwenden müssen, utf8_decode(utf8_encode)..
Funktion returs string mit 20 Worten.
UTF-8 PROBLEME & LÖSUNGEN von PHP-FUNKTIONEN
1. Wie speichert UTF-8-Charterer (mathematische Zeichenfolge,spezielle Zeichen wie 92 ÷ 8 ÷ 2 = ? ) ?
Ans. $string =utf8_encode('92 ÷ 8 ÷ 2 = ?');
2. So drucken Sie die UTF-8-Charterer Aus der Datenbank ?
Ans. echo utf8_decode($string);
Hinweis: Wenn Sie nicht wollen, zu tun dies durch die Verwendung der Codierung/Decodierung können Sie dieses über.
1. wenn Sie mit mysqli_query() dann
2.Wenn Sie PDO dann
Hatte ich nur Probleme mit der text-Felder in meine Datenbank-Struktur, die Speicherung von Produkt-Beschreibungen. Ich setzen Sie das Feld Einstellungen, um blob statt text, der mein problem gelöst.