我有一个存储在用
编码的服务器上的数据库utf8_general_ci
我的所有网页都被强制进入
UTF8
我与数据库的连接是这样的:
return new PDO('mysql:host=localhost;dbname=XXXX',
'XXXX', 'XXXX', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
PDO::MYSQL_ATTR_LOCAL_INFILE => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
但我甚至尝试过选择 “SET NAMES utf8”
当我尝试解析我的结果集时,我总是遇到一些文本字段的问题,如果我尝试命令喜欢:
$originalEncoding = mb_detect_encoding($fieldWithProbs);
回到我身边
ASCII
然后如果我尝试使用以下命令转换它:
$newEncodedData = mb_convert_encoding($fieldWithProbs, 'UTF-8');
它似乎不起作用,如果我再次询问编码的类型仍然是ASCII。 奇怪的是,它在本地但不在远程服务器上工作,在db set上具有相同类型的编码。 我该如何解决这个问题?
答案 0 :(得分:1)
ASCII是UTF8的子集。如果将ASCII转换为UTF8,则二进制表示保持不变。
所以没有任何问题,只是有点不理解。
The Minimum Every Software Developer Must Know About Unicode and Character Sets
答案 1 :(得分:-1)
我用这个来解决问题:
$row=array_map('utf8_encode', $row);
在执行任何其他操作之前,在提取的行上。 我希望它对某些人有帮助,我在这周围浪费了很多时间:)
问题不在于分配"损坏的文本"使用json_encode()
,即使使用选项JSON_UNESCAPED_UNICODE
我也没有解决问题。