我正试图从数据库中获取一些需要UTF-8编码文本的条目。但是文本只显示为スーパーサンダーブレード
。
目前从我的数据库中获取内容的方法是以下代码:
public function getDetails($title){
$result = DB::select('SELECT * FROM `table` WHERE `title` = ?', [$title]);
return view('details', ['details' => $result]);
}
我的观点代码是:
@foreach ($details as $detail)
<li>{{ $detail->text }} </li>
@endforeach
我尝试使用AppServiceProvider
中的以下内容覆盖Blade的echo函数:
Blade::setEchoFormat('e(utf8_encode(%s))');
我确保我的文档是UTF-8并且View的<head>
包含<meta charset="utf-8">
,我的db-table也是UTF-8,我试图创建一个简单的PHP文件到通过mysqli
查询数据库,结果很好。视图中的硬写特殊字符也没问题。
还有其他需要照顾或尝试的事情吗?
答案 0 :(得分:1)
由于十六进制为C3A3 E2809A C2B9 C3A3 C692 ...
,因此您具有“双重编码”。这通常是由......引起的。
SET NAMES latin1
声称客户端有latin1编码;和CHARACTER SET utf8
(好)。那时你还做过utf8_encode()
吗?
发生了什么事。对于第一个字符,您有E382B9
。但是,通过说latin1
,被视为E3 82 B9
,其中latin1为ス
。我们发送到表中的三个字符,即时转换为utf8
,如表/列定义所示:C3A3 E2809A C2B9
- 这3个字符的utf8十六进制
Normaly,“双重编码”“修复”自己阅读。这是从utf8到latin1的两个翻译的步骤相反,你回来ス
。
但显然其中一个翻译被忽略了。
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+--------------
| Variable_name | Value
+--------------------------+--------------
| character_set_client | utf8 **
| character_set_connection | utf8 **
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | utf8 **
| character_set_server | utf8mb4
| character_set_system | utf8
| character_sets_dir | ...
+--------------------------+------------
执行**
时会同时设置三个SET NAMES utf8
。但我认为你有一些混合物,可能是
| character_set_client | latin1
| character_set_connection | latin1
| character_set_results | utf8
不好。
如果您需要恢复数据,则my lengthy charset blog中有代码。
对不起我不知道Laravel如何正确地建立所有三个设置。也许你可以在连接后立即执行SET NAMES utf8
。
答案 1 :(得分:0)
这是スーパーサンダーブレード
通常在
时发生SET NAMES latin1
(或set_charset('latin1')
或...)相关联。 (应该是utf8
。)CHARACTER SET utf8
,也可能不是org.eclipse.jdt.core.dom.CompilationUnit.getPosition(int, int)
,但应该是这样。不要在代码中使用任何功能;它只会弄清楚要做什么。
抱歉,我不知道如何配置Laravel以使用utf8。
片假名不需要utf8mb4;我不知道汉字是否有。因此,您可以考虑将MySQL设置从utf8切换到utf8mb4。