gpt4 book ai didi

php - 在 UTF-8 编码的字符串上使用 str_split

转载 作者:IT王子 更新时间:2023-10-28 23:59:00 26 4
gpt4 key购买 nike

我目前正在做一个项目,我想我应该继续学习如何使用 PDO,而不是使用常规的 MySQL 查询。

我有一个名为 contestants 的表,数据库、表和所有列都是 utf-8 格式。我在参赛者表中有十个条目,他们的“名称”列包含 åäö 等字符。

现在,当我从数据库中获取一个条目并将名称 var_dump 时,我得到了一个很好的结果,一个包含所有特殊字符的字符串。但我需要做的是按字符拆分字符串,将它们放入一个数组中,然后将其打乱。

例如,我有这个字符串:测试 ÅÄÖ 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 without BOM 并且此页面上没有其他特殊字符存在此问题。哪里出了问题,或者我做错了什么?

最佳答案

请注意,据报告您的连接字符串中使用的 utf8 声明无效。在 php.net 的评论中,我经常看到这个替代方案:

$dbHandle = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPass,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

关于php - 在 UTF-8 编码的字符串上使用 str_split,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com