質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

217閲覧

【OS fodora linux,php言語 】JpGraphで棒グラフを描画する

kazu.omachi

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2024/04/03 21:23

編集2024/04/03 21:42

実現したいこと

●OS:Fedora release 37 (Thirty Seven)
●言語:PHP 7.3.6 (cli) (built: Jan 29 2024 11:18:18) ( ZTS )
Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.6, Copyright (c) 1998-2018 Zend Technologies
●実現したいこと
JpGraphでグラフを描画する際にタイトルなどのテキストに日本語書体を使って文字化けせずに表示させたいですので対策などがあればお教えいただければ、幸いです。皆様よろしくお願いいたします
●現状の問題
JpGraphでグラフを描画する際にタイトルなどのテキストに日本語書体を使うと文字化けしてしまう
以下URLに再現手順を記載いたしました
https://chie.ddns.net/publish/L1i4sKO2W41712174003660db3b3abc5c.html

発生している問題・分からないこと

●現状の問題
JpGraphでグラフを描画する際にタイトルなどのテキストに日本語書体を使うと文字化けしてしまう

該当のソースコード

// ************************************************************ // 棒グラフを描画するソースコードサンプル // OSは、linuxなのでエンコードは、utf-8に指定した // ************************************************************ <?php // content="text/plain; charset=utf-8" header('Content-Type: text/html; charset=utf-8'); require_once ('/opt/httpd/httpd-2.4.38/htdocs/jpgraph-4.4.2/src/jpgraph.php'); require_once ('/opt/httpd/httpd-2.4.38/htdocs/jpgraph-4.4.2/src/jpgraph_bar.php'); $datay1=array(13,8,19,7,17,6); $datay2=array(4,5,2,7,5,25); // Create the graph. $graph = new Graph(350,250); $graph->SetScale('textlin'); $graph->SetMarginColor('white'); ob_end_clean(); // 出力バッファを無効 mb_http_output("pass"); // データをそのまま出力する // タイトルは、'UTF-8'を指定 $graph->title->SetFont(FF_MINCHO,FS_NORMAL,20); $graph->title->Set(mb_convert_encoding('タイトル', 'UTF-8', 'auto')); // Create the first bar $bplot = new BarPlot($datay1); $bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT); $bplot->SetColor('darkred'); // Create the second bar $bplot2 = new BarPlot($datay2); $bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT); $bplot2->SetColor('darkgreen'); // And join them in an accumulated bar $accbplot = new AccBarPlot(array($bplot,$bplot2)); $accbplot->SetColor('red'); $accbplot->SetWeight(1); $graph->Add($accbplot); $graph->Stroke(); ?>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

調べてみましたが解決方法が見つかりませんでした

補足

https://chie.ddns.net/
まったくの初心者のわたくしの作成したサイトを更新中です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2024/04/03 22:34

> JpGraphでグラフを描画する際にタイトルなどのテキストに日本語書体を使うと文字化けしてしまう 「文字化け」とはどのようなことが起きているのですか。スクリーンショットを掲載するなどして具体的に示してください。 ちなみに、このコメント欄に書いたり、外部のウェブサイトに掲載したりするのではありません。質問文を編集して書いてください。
guest

回答1

0

FreeBSD 13.2、PHP 8.3.1で確認しました。
表示はWindows 11、Edge、Chrome、Firefoxで確認しました。

上記環境では、提示されたソースより「ob_end_clean();」行を削除するだけで正常に実行できました。
削除前は、

Notice: ob_end_clean(): Failed to delete buffer. No buffer to delete in /usr/local/www/apache24/data/sample_graph.php on line 15 JpGraph Error: HTTP headers have already been sent. Caused by output from file sample_graph.php at line 15.

とエラー出力されました。

ikedasさんと同じコメントになりますが、文字化けを具体的に提示することで、その化け具合で何かわかるかもしれません。

(追記)
再現手順のリンク先の文字化けを見ましたが、UTF-8をShift_JISで開いたときの化け方です。

$graph->title->Set(mb_convert_encoding('タイトル', 'UTF-8', 'auto'));

の「auto」を「SJIS」に変更しても再現します。もともとUTF-8の「タイトル」をautoがShift_JISと誤判定しています。ここは無理に変換しないで、

$graph->title->Set('タイトル');

では、どうでしょうか? こちらの環境では正しく表示します。
実行結果

投稿2024/04/04 22:06

編集2024/04/05 22:14
hiroki-o

総合スコア1019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazu.omachi

2024/04/05 15:16

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
kazu.omachi

2024/04/05 15:20

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問