[英]'Malformed UTF-8 characters, possibly incorrectly encoded' in Laravel
[英]Laravel malformed character UTF-8
當我嘗試獲取所有目錄的列表並在JSON響應中使用該列表時,出現以下錯誤:響應的UTF-8字符格式錯誤。 我知道目錄中有類似“ÆØÅ”的字母。 當我使用dd($directories)
我可以在每個目錄的前面看到一個“ b”,其中包含一個“ÆØÅ”字母(如圖中所示)。
我試圖使用它,但這也不起作用。 return response() -> json($movies, 200, ['Content-type'=> 'application/json; charset=utf-8'], JSON_UNESCAPED_UNICODE);
編輯:這是我現在的代碼。
$drives = ['M1', 'M2', 'M3', 'M4'];
$movies =[];
foreach ($drives as $drive) {
$disk = Storage::disk($drive);
foreach ($disk -> directories() as $movie) {
$movies[] = $movie;
}
}
return response() -> json($movies, 200, ['Content-type'=> 'application/json; charset=utf-8'], JSON_UNESCAPED_UNICODE);
您正在使用來自文件系統文件名的字符串。 此類字符串通常不在UTF-8中,通常使用ISO-8859-1。 巧合的是,這是utf8_encode
需要工作的必需輸入編碼。
$drives = ['M1', 'M2', 'M3', 'M4'];
$movies =[];
foreach ($drives as $drive) {
$disk = Storage::disk($drive);
foreach ($disk -> directories() as $movie) {
$movies[] = utf8_encode($movie);
}
}
return response() -> json($movies, 200, ['Content-type'=> 'application/json; charset=utf-8'], JSON_UNESCAPED_UNICODE);
但是,如果您確實希望從其他(已知)編碼轉換為UTF-8,則需要使用mb_convert_encoding($str,"UTF-8",$from_encoding)
。 總體而言,請注意將HTTP響應編碼設置為UTF-8不會自動轉換任何字符編碼。 您必須手動執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.