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

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

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

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

Q&A

解決済

1回答

708閲覧

整形された文書を取得したい

ratezou

総合スコア62

PHP

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

0グッド

0クリップ

投稿2023/01/18 04:13

編集2023/01/18 04:15

サイト作成の勉強中です。

GoogleCloudのVisionAPIでレシートのテキストOCRをしています。
結果が返ってくるのですが、画面には改行などなくズラーーーっと表示されます。
ブラウザのソースの表示だと改行が入るため、見やすいですし、何かロジックを組み込むときも便利だと思います。

どのようにしたら良いでしょうか?
アドバイスのほどよろしくお願い致します。

追記1)preではなく、ループなどで一行づつ読み込みたいです。
例えば、日付を探したり、円サインの最大値を合計とみなしたりしたいです。

<?PHP // APIキー $api_key = "***" ; //画像のPATH $image_path = "my.jpg"; // リクエスト用のJSONを作成 $json = json_encode( array( "requests" => array( array( "image" => array( "content" => base64_encode( file_get_contents( $image_path ) ) , ) , "features" => array( array( "type" => "TEXT_DETECTION" , "maxResults" => 10 , ) , ) , ) , ) , ) ) ; // リクエストを実行 $curl = curl_init() ; curl_setopt( $curl, CURLOPT_URL, "https://vision.googleapis.com/v1/images:annotate?key=" . $api_key ) ; curl_setopt( $curl, CURLOPT_HEADER, true ) ; curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, "POST" ) ; curl_setopt( $curl, CURLOPT_HTTPHEADER, array( "Content-Type: application/json" ) ) ; curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false ) ; curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ) ; if( isset($referer) && !empty($referer) ) curl_setopt( $curl, CURLOPT_REFERER, $referer ) ; curl_setopt( $curl, CURLOPT_TIMEOUT, 15 ) ; curl_setopt( $curl, CURLOPT_POSTFIELDS, $json ) ; $res1 = curl_exec( $curl ) ; $res2 = curl_getinfo( $curl ) ; curl_close( $curl ) ; // 取得したデータ $json = substr( $res1, $res2["header_size"] ) ; $array_json=json_decode($json, true); $text=$array_json["responses"]["0"]["textAnnotations"]["0"]["description"]; var_dump($text);

ソースの表示だと、以下の感じです。(ネットで拾ったレシートです)

string(594) "まいばすけっと
野庭町店
TEL045-840-1062 FAX045-840-1063
領収証
営業時間 : あさ9時~よる11時
年中無休
レジ0104 2019/6/28(金) 17:05
取7345
: 002153742
どん兵衛釜たま風うどん 276
<2個 X 単138)
カルピス カルピスウォー 184
<2個 X 単92)
雪メグ なめらかプリン
とろりクリームプリン
糖質みかんゼリー
メイトーなめらかプリン
QTTA明太チーズ味
(ボーナスポイント
小 計
外税 8%対象額
外税 8%
合計
現金
ID: 0164
お釣り
98
128
98
88
128
30 P )
¥1,000
¥1,000
¥80
¥1,080
¥1,100
¥20"

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

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

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

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

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

ratezou

2023/01/18 04:52

ファイルにIOすればできますね。 スマートじゃないと思うんです。よろしくお願いします。 $text=$array_json["responses"]["0"]["textAnnotations"]["0"]["description"]; // var_dump($text); file_put_contents("test.txt", $text); foreach (file("test.txt") as $block) { echo $block . "<br />"; }
guest

回答1

0

ベストアンサー

「画面」はWebブラウザでの表示の意味であれば、取得したデータをHTMLとして正しく整形する必要があります。
例えば各行を p タグで囲うとか、行末に br タグをつけるとか、表示したい状態により正解は異なりますが、出力が正しいHTMLとなるように整形すれば、意図通りの表示となるはずです。

(コメントを踏まえて追記)
1行ずつ処理(判定)したい、ということであれば、取得した改行込みのテキストデータを、改行コードを区切り文字として配列化し、各要素(⁼各行)に対し判定をしていくとどうでしょうか。

$arr = explode("\n", $text); // 改行コードが LF ではなく CRLF であれば "\n" は "\r\n" に foreach($arr as $line) { // $line が1行のテキストなので、判定・処理等 }

といった感じで、意味あってますか

投稿2023/01/18 05:49

編集2023/01/18 06:17
kaz.Suenaga

総合スコア2037

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

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

ratezou

2023/01/18 06:06 編集

やりたいことが具体的で無かったです。 エネオスのレシートを読み込み、日時、車番、金額をformに張り付けたいのです。 なので、HTMLの整形前の話ということになります。 分かりにくくてすいません。 そのためには、1行づつ読み込み、日付や車番や金額を判断し、それ以外は読み飛ばしたいのです。
ratezou

2023/01/18 06:21

これです! あとは、ループの中で日時なのか、車番なのかなどなど判断して変数に保存しといて、form画面を描画します。 まさにのご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問