我们有一个非常旧的php5.2
代码库,其中一些甚至在php3
中使用mysql 5.1
,我们正试图迁移到laravel 7/8
。数据库中存储的数据是使用latin1
编码存储的日文字符,如
¥í¥°¥¤¥óÀ®¸ù
¥í¥°¥¢¥¦¥È
¥á¡¼¥ë¥¢¥É¥ì¥¹Êѹ¹
这些数据在使用php5.2
时正确显示,并且在当前代码库中工作良好,但当我尝试使用php5.2
以外的任何版本访问该数据时,我无法获得正确的值。
我尝试过但没有成功。
- 将php文件的编码改为
header
。 - 将字符串编码改为
mb_convert_encoding
。 - 将
php.ini
中的default_charset
设置为空字符串
但是这些解决方案似乎都不起作用。还有其他方法可以正确显示这些数据吗?
$dsn = 'mysql:dbname=dbname;host=127.0.0.1;port=3306';
$user = 'root';
$password = '';
$db = new PDO($dsn, $user, $password);
$query = $db->prepare('SELECT * FROM tablename');
if ($query->execute()) {
echo '<ul>';
while ($row = $query->fetch()) {
echo '<li>' . $row['column_name'] . '</li>';
}
echo '</ul>';
}
相同的代码块在使用php5.2
的浏览器中显示正确的数据,但它在php7.3
中不起作用,这怎么可能?
在dsn中指定字符集,例如
$db = new PDO('dblib:host=host;dbname=db;charset=utf8mb4', $user, $pwd);
phphttp://mysql.rjweb.org/doc.php/charcoll
更多关于Mojibake: UTF-8字符的问题;我看到的不是我存储的