アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるサイトで、次の方法でバイナリファイルをテキストに変換することができると書いてありました。
<?php
file_get_contents('xxx.doc');

しかし結果は文字化けでした。どこが問題でしょうか

A 回答 (5件)

この場合の「文字列に読み込む」というのは、例えば


$a = file_get_contents('xxx.doc');
としたら、 xxx.doc のバイナリデータが そのまま $a に文字列型として格納されて、
$a の 5文字目を見ると、元ファイルの5バイト目がわかる、
とか、そんな動作のことです。

「内容を変換」するわけではありません。
    • good
    • 0

> ではどのようにして変換できるのでしょうか(どのプログラムで)



https://github.com/PHPOffice/PHPWord

これを使えばできるかも・・・
    • good
    • 0
この回答へのお礼

>https://github.com/PHPOffice/PHPWord

このサイトの中のどのファイルを使えばよいのでしょうか

お礼日時:2018/08/19 09:32

> バイナリファイルの構造とありますが、これは可能でしょうか。



もちろん、自力で構造を解析できるならば可能です。マイクロソフト自身から、データ構造に関する完全な説明がなされたことはないため(部分的にはあったらしい)、どうやっても自分で解析するという行為は避けて通れないです。

ちなみに、doc形式はOfficeのバージョンによる変遷があり、その都度構造が変わっています。またdocx形式は実はzip圧縮されていて、拡張子をzipに変更してやると解凍でき、圧縮前の中身が見えます。実は解凍すると中身はXMLになっているから、ある意味これはテキストファイルです。
    • good
    • 0
この回答へのお礼

>どうやっても自分で解析するという行為は避けて通れないです。---
その都度構造が変わっています.

そうですか。難しいということですね。わかりました。

お礼日時:2018/08/18 23:32

バイナリファイルは、ファイルフォーマットがアプリの数だけあると言っても過言ではなく、そもそもテキストデータを含まないものも多々あります。

また、一見すると無意味な文字の羅列があった場合、それが実はテキストなのか、たまたまテキストのように見えるだけのバイナリなのかを区別することはまず不可能です。それを可能にする方法は唯一つ、そのバイナリファイルの構造を事前に知っていること。

なのでそうしたバイナリファイルの中を読み取ってテキストだけをきれいに取り出すのは、アプリの数だけ存在するようなバイナリファイルの構造をすべて事前に知っていなければならない。そんな事が可能だと思いますか?まあ常識的に考えたら無理ですよね。

なのでバイナリファイルに対応したというのはせいぜい、バイナリの中にある0x00(ヌル文字)を見つけた場合にそこを終わりと解釈しないで最後まで読むっていうのと、通常の文字に使用しない範囲の文字コードデータをバイナリとみなして無視するくらいのことが限界です。
    • good
    • 0
この回答へのお礼

いろいろ教えていただきありがとうございます。当方はdoc とdocxのみをテキストに変換したいと思っています。バイナリファイルの構造とありますが、これは可能でしょうか。

お礼日時:2018/08/18 21:33

バイナリデータに対応しているだけでテキストには変換しません。



http://php.net/manual/ja/function.file-get-conte …

注意: この関数はバイナリデータに対応しています。
    • good
    • 0
この回答へのお礼

>バイナリデータに対応しているだけでテキストには変換しません。

でもサイトを見ると、「文字列に読み込む」とありますが。ではどのようにして変換できるのでしょうか(どのプログラムで)

お礼日時:2018/08/18 21:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!