我目前正在从事一个项目,我不使用常规的MySQL查询,而是继续学习如何使用PDO。
我有一个称为参赛者的表,数据库,表和所有列均位于utf-8中。我的参赛者表中有10个条目,而它们的“名称”列中包含诸如åäö之类的字符。
现在,当我从数据库中获取一个条目并使用var_dump的名称时,我得到了一个很好的结果,即一个包含所有特殊字符的字符串。但是我需要做的是按字符分割字符串,将它们放入数组中,然后重新排列。
例如,我有以下字符串: TestÅÄÖTåän
当我运行str_split时,我得到了数组中自己的每个键。唯一的问题是所有特殊字符都显示为: ,表示数组将如下所示:
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 )
如您所见,它不仅弄乱了字符,而且还在str_split进程中复制了它们。我尝试了几种分割字符串的方法,但是它们都有相同的问题。当我在分割之前输出字符串时,它会很好地显示特殊字符。
这是我的dbConn.php代码:
//需要配置文件: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);
这是我用来从数据库中获取并循环的代码:
// 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);
我正在使用utf-8进行连接,我的php文件是utf-8, 没有BOM, 并且此页面上的其他特殊字符也没有共享此问题。可能出什么问题了,或者我做错了什么?
str_split不适用于多字节字符,它将仅返回第一个字节- 从而使您的字符无效。您可以使用mb_split。
str_split
mb_split