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

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

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

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

Q&A

解決済

3回答

2021閲覧

[PHP]mPDFを使ったことがある方 文字化け防止について

uthio

総合スコア18

PHP

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

0グッド

0クリップ

投稿2019/05/28 09:36

前提・実現したいこと

mPDFというツールでPHPでHTMLをPDF化したいと考えています。
ブラウザ表示とダウンロードは問題なくできたのですが、
文字列に保存して表示すると文字化けしてしまいます。(以下添付)

イメージ説明

※文字化けというか、hogehogeみたいな文言入れるだけでもこうなってしまうのですが…。

Googleなどで調べてみたのですが、使われている方が少ないので参考例がなく
もし経験ある方で、解決策をご存知でしたらアドバイスいただければ助かります。

該当のソースコード

PHP

1<?php 2 3//フォームからhtml文字列を取得 4$text = $_POST['text']; 5 6$pdf_html = <<<__EOT 7 8<html> 9<head> 10<meta charset="utf-8"> 11<link type="text/css" rel="stylesheet" href="hogehoge"> 12</head> 13<body> 14{$test} 15</div> 16</body> 17</html> 18 19__EOT; 20 21// mPDFライブラリ呼び出し 22require_once("mpdf.php"); 23 24//出力設定 25$mpdf=new mPDF('ja+aCJK', 'A4', 12, '', 30, 30, 36, 20, 0, 0, 'P'); 26 27//line-height設定 28$mpdf->useFixedNormalLineHeight = false; 29$mpdf->useFixedTextBaseline = false; 30$mpdf->adjustFontDescLineheight = 1.5; 31 32// 文字化け防止 33$mpdf->ignore_invalid_utf8 = true; 34 35// PDFタイトル設定 36$mpdf->setTitle("test.pdf"); 37 38// PDFファイルにHTMLをセット 39$html = mb_convert_encoding($pdf_html,"UTF-8","auto"); 40$mpdf->WriteHTML($pdf_html); 41 42// PDFファイルとして出力 43// $mpdf->Output("test.pdf", "I"); 44 45// PDFファイルとしてダウンロード 46// $mpdf->Output("test.pdf", "D"); 47 48// 文字列にして出力 49$pdf_file = $mpdf->Output( "", "S"); 50echo $pdf_file; 51 52?>

試したこと

http://piyopiyocs.blog115.fc2.com/blog-entry-791.html
こちら参考にして「$mpdf->ignore_invalid_utf8 = true;」を追記したり
出力前に「mb_convert_encoding」でエンコードしてみたものの、上手くいかずです。

文字列にする時点で何かしなければいけないことあって、それが足りないのでしょうか。

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

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

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

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

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

CHERRY

2019/05/28 10:20

PDFファイルは、バイナリファイルなのですが、文字列で取得したいというのは、どのようなデータを取得したいのでしょうか? また、文字列で取得してどのように使いたいのでしょうか?
uthio

2019/05/28 10:34

>CHERRY様 ご質問いただきありがとうございます。 今回の目的はフォームなどから渡されたHTML文字列をPDFにしてブラウザに表示とダウンロード、ここは出来ているのですが、加えてそのPDFにしたHTML含む文字列をデータベースに送ることも出来るようにしておきたいということになります。 そのため、文字列での取得が必要かと思っておりました。 説明下手で意図が伝わりにくく申し訳ないです。
guest

回答3

0

ご自身が書いているように「文字列として出力」しているだけですよ。

php

1// 文字列にして出力 2$pdf_file = $mpdf->Output( "", "S"); 3echo $pdf_file;

php

1$mpdf->Output( "output.pdf", "D");

投稿2019/05/28 09:55

編集2019/05/28 09:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

uthio

2019/05/28 10:03

>Kosuke_Shibuya様 ご回答ありがとうございます。 すみません、ご提示いただいたものの場合だとダウンロードになってしまうかと思うのですが、実践したいこととしてはPDFを文字列で取得したいです。 なのでパラメータに「S」を入れていたのですが、私の認識が間違っておりますでしょうか?
退会済みユーザー

退会済みユーザー

2019/05/28 13:15 編集

'S'を指定した結果が、質問の状態です。 'S'を指定することなんてデバッグの時くらいのはず。
uthio

2019/05/29 02:53

ご回答ありがとうございました。 そもそも私にバイナリデータの認識が足りなかったです。 大変失礼しました。 今回やりたかったことは無理にSでやる必要はないと判断できました。
guest

0

皆さま、ご意見ありがとうございます。
そもそもバイナリデータへの認識が足りず、的外れな質問になってしまったと思います。
渡されたhtml文字列をPOSTしてデータベースへ保存するなどのやり方もあり、そちらで対応したほうがシンプルかと思いました。
やり方は変えても望んでいた結果にはたどり着けそうですので、こちらクローズさせていただきます。

貴重な時間をいただき感謝いたします。
またよろしくお願いいたします。

投稿2019/05/29 02:44

uthio

総合スコア18

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

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

0

ベストアンサー

提示のものは文字化けではなくファイルのバイナリデータです。
なので「ファイルを文字列で」取得できています。

どのような出力を望まれているかこれだけでは分かりませんが、
マニュアルを読んで出力したい形式にあわせて対応してください。

投稿2019/05/28 10:11

編集2019/05/28 10:18
m.ts10806

総合スコア80852

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

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

uthio

2019/05/28 10:24

>mts10806様 いつもご回答、ありがとうございます。 感謝いたします。 バイナリデータということですか。 なるほど、知識不足で失礼しました。 マニュアルを見てもう一度、試してみます。 今回の意図としては文字列にしたものをデータベースに送ることを想定していました。
m.ts10806

2019/05/28 11:14

そもそもなぜ文字列にする必要があるのでしょうか? ファイルなのでファイルの実態とかならわかるのですが。(画像とかも同じですが)
m.ts10806

2019/05/28 11:15

あ、でもバイナリデータならそのままDBに保存すれば良いですね。 取り出すときに変換必要ですが。
uthio

2019/05/28 11:20

そのまま保存ですか! そういう方法もあるのですね。 ちょっと色々試して最善の方法を探ってみたいと思います。 データベースには履歴として残しておきたい思惑もあります。 必要な時に使えるように。 あ、でも、データベースにバイナリデータのまま入れた場合、selectした時は表示はバイナリデータのままでしょうか?
m.ts10806

2019/05/29 02:48

>あ、でも、データベースにバイナリデータのまま入れた場合、selectした時は表示はバイナリデータのままでしょうか? はい。あくまで「バイナリデータ」(の文字列)が入るだけです。 それをPDFなどにするにはバイナリデータから変換する必要があります(これは画像を保存する場合でも同じ)
uthio

2019/05/29 02:51

>mts10806様 ご意見ありがとうございました。 少し試してみましたが結果、無理にこの方法でやる必要性を感じられなかったので、別の方法(POSTしてデータベースに渡す等)で対応することにしました。 私の認識不足で貴重なお時間を使わせてしまって申し訳ないです。 でもバイナリデータについては非常に参考になりました。 今後に役立てていきたいと思います。 また、よろしくお願いいたします。
m.ts10806

2019/05/29 02:57

「結局どうしたいか」が見えないですが、PDF作ったならそのままサーバに保存して、そのパスだけをDBに保存するというやり方で良いかと(画像とかでも同じ)
uthio

2019/05/29 03:17

あ、失礼しました。 最終的にやりたかったのは渡されたHTMLデータ(文字列)を ①PDFにしてブラウザ表示 ②PDFにしてダウンロード ③渡されたhtml文字列をデータベースに保存(履歴用) でして、①と②は出来てましたが③も同じmPDFライブラリで対応できるのかなと思っていたところバイナリデータになった(というのを認識してなかった)ので今回の質問をあげさせていただいた次第でした。 色々ご意見いただいた結果、無理にライブラリを使ってバイナリデータを変換したりする必要はないのかな…と。
m.ts10806

2019/05/29 03:45

なるほど。把握しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問