0

ええと、私はすでに数か月間、これを修正しようとして壁に頭をぶつけてきました。私は、文字地獄と表現できるレガシー MySQL データベースを持っています。多くの作業の後、誤って表示されたすべての文字を修正し、すべてを UTF-8 (テーブル、照合、db への接続、ヘッダーなど) にすることができました。

問題は、PHPWord を使用して Word 文書を作成しようとすると、二重引用符 (") が html エンティティに相当するものとして表示されること"です。それが私の勝利を阻む唯一の障害なので、アイデアがあれば非常に感謝します.

コードは次のとおりです。

include_once "../PHPWord.php";
include_once "../debug.php";

$file_name = "filename.docx";
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file_name");
//header("Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document");
header("Content-Type: application/vnd.ms-word; charset=utf-8");
header("Content-Transfer-Encoding: binary");

$index = 1218;
$mysqli = new mysqli("host","user","pass","database");
$mysqli->set_charset("utf8");
$qry1 = "SELECT * FROM table WHERE index = $index ORDER BY field DESC";
$qry2 = "SELECT * FROM table2 WHERE index = $index";

$PHPWord = new PHPWord();
$section = $PHPWord->createSection();

$section->addText("Connection Encoding: ".$mysqli->character_set_name());
$section->addText("resuls");

$res1 = $mysqli->query($qry1);
while($row = $res1->fetch_assoc()){
    $section->addText($row[name]);
    $section->addText(mb_detect_encoding($row['name']));
}

$section->addText("results2");

$res2 = $mysqli->query($qry2);
while($row = $res2->fetch_assoc()){
    $section->addText(trim($row['title']));
    $section->addText(mb_detect_encoding($row['title']));
}

$objWriter = PHPWord_IOFactory::createWriter($PHPWord,'Word2007');
$objWriter->save('php://output');
exit;

結果、次のようになります。

book:"Book Title"

これまでのところ、html_entity_decode、エスケープ文字、変更された PHPWord ファイルなどの PHP 関数を含む多くの関数とソリューションを試して、テキストを出力に追加するときにテキストを再エンコードしようとしないようにしました。

前もって感謝します。

4

2 に答える 2

0

msqli_real_escape_string()を使用する必要があると仮定しています

クエリのどこかで、おそらくこれに解決策があります: phpWordのUTF-8の処理

于 2012-07-17T20:13:47.620 に答える