文字化けしたHTMLでは、何の文字コードを指定していますか?
ブラウザ側で、表示文字コード(エンコード)を変更する機能があるはずなので、EUC、UTF-8、Shift-JIS、ISO-JP 等に変更してみて、正しく表示される文字コードを特定して、HTMLのmetaタグのcharsetかcontext属性で、その文字コードを指定するのはどうでしょうか?
phpのLaravelでサイトを作成しています。
座標から図形を作成する段階でエラー?文字化けが起きていて
自分の調べ方が悪いのか、解消できずにいます。
解決方法を教えて下さい。
エラーはでておりませんが
ブラウザではこのような状況です。
ローカル環境 Laravel v10.28.0 (PHP v8.2.11)
<?php
//線分の長さ
$r = 80;
//角度
$angle = 45;
//キャンバスサイズ
$width = 200;
$height = 200;
//キャンバスの中心を原点とする
$origin = array( round($width / 2), round($height / 2) );
$image = imagecreatetruecolor($width, $height);
//線の色
$color = imagecolorallocate( $image, 255, 255, 255 );
list($x, $y) = point_rotate($r, $angle);
imageline($image, $origin[0], $origin[1], $origin[0] + $x, $origin[1] + $y, $color);
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
function point_rotate($r, $angle){
$angle = deg2rad($angle);
$x = round($r * cos($angle));
$y = round($r * sin($angle));
return array($x, $y);
}
出力方法を変えたら解決に至りました。
GDライブラリの学習をしてから使うべきだという教訓になりました...
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
上記の部分を、下記に変更したところ問題なく出力されました!
header('Content-Type: image/jpeg');
imagejpeg($image,"horo.jpg");
echo '<img src="horo.jpg" alt="Image">';
・gdライブラリは有効であることを確認しました。
・素のphpファイルでは文字化けは確認されませんでした。
ブラウザのレスポンスヘッダーは
Content-Type:text/html; charset=UTF-8を返しておりました。
しかし少し調べましたが解決には至っておりません。
文字化けしたHTMLでは、何の文字コードを指定していますか?
ブラウザ側で、表示文字コード(エンコード)を変更する機能があるはずなので、EUC、UTF-8、Shift-JIS、ISO-JP 等に変更してみて、正しく表示される文字コードを特定して、HTMLのmetaタグのcharsetかcontext属性で、その文字コードを指定するのはどうでしょうか?
@tedd0203
Questioner回答ありがとうございます。
文字コードの指定はutf-8で意図通りでした。
chromeでエンコード方法を変更しましたがどれも文字化けでした。
学び始めて間もないため何がどうなっているのかわからない状態です(^_^;)
画像の出力方法に問題があるのかもしれません。
Laravelが「Content-type: text/html」とかを吐いていたりしませんか。
ウェブブラウザのデバッグツールでどういうレスポンスヘッダーが返されたのか確認すればよいと思います。
回答ありがとうございます。
おっしゃるとおり、レスポンスヘッダーのコンテンツタイプが
Content-Type:text/html; charset=UTF-8
を示しておりました。
少し調べましたが解決には至りませんでした。
このあたりのエラーは何を学べば理解できるでしょうか?
「Laravelで」とありますが、該当するソースコードにLaravelの要素が見えないので、問題の推測が難しいところがあります。
誤記でないのであれば、省略せずに記載するのが良いと思います。
ひとまずLaravelのコントローラーなどで実行していると仮定して回答します。
Laravelにはレスポンスについての決まりがあるので、独自にheader('Content-Type: image/jpeg')
としても意図しない挙動になる可能性があります。
「Fileレスポンス」の項を参照していただければ、ブラウザへ画像やPDFのようなファイルを表示するため方法が記載されています。
生成した画像をいったん保存することになりますが、こちらを試してみてはいかがでしょうか?
@tedd0203
Questioner回答ありがとうございます。
「Laravelで」とありますが、該当するソースコードにLaravelの要素が見えないので、問題の推測が難しいところがあります。
誤記でないのであれば、省略せずに記載するのが良いと思います。
おっしゃるとおりですね、以後気をつけます。
ご指摘の方法でも画像が表示されることを確認しました。
出力方法に問題があったようです。
ありがとうございます!