PHP 编辑 Microsoft Word 文档 str_replace 和 preg_replace 不起作用

发布于 2024-11-08 20:27:35 字数 1062 浏览 3 评论 0原文

假设,我有 MSWord 文件 source.doc,其下一个内容是“Microsoft Word 文件的内容”。 例如,我想通过 PHP 打开它,并将单词“Microsoft”替换为“Openoffice”,并将结果保存到 result.doc 中。 这是使用 preg_replace 的代码:

$content = file_get_contents( SOMEPATH . '/source.doc' );
$new_content = preg_replace( '/Microsoft/i', 'Openoffice', $content );
file_put_contents( SOMEPATH . '/target.doc', $new_content );

或使用 str_replace

$content = file_get_contents( SOMEPATH . '/source.doc' );
$new_content = str_replace( 'Microsoft', 'Openoffice', $content );
file_put_contents( SOMEPATH . '/target.doc', $new_content );

它们都不起作用。代码运行没有任何异常,但 target.docsource.doc 相同。更换不执行。

我已经尝试了很多不同的接收方式,例如正则表达式修饰符、 iconv 等,但没有任何帮助。

$contentvar_dump 显示了 source.doc 的原始结构,其中充满了不寻常的字符,并且我认为其中一些会停止 str_replacepreg_replace 扫描。无法弄清楚它是哪个字符以及如果找到它我该怎么办。

$new_contentvar_dump 与 $content 相同。

感谢转发任何帮助!

Assume, I've got MSWord file source.doc with next content "Content of Microsoft Word file".
For example, I'd like to open it via PHP and replace word "Microsoft" to "Openoffice" and save the result into result.doc.
Here is the code using preg_replace:

$content = file_get_contents( SOMEPATH . '/source.doc' );
$new_content = preg_replace( '/Microsoft/i', 'Openoffice', $content );
file_put_contents( SOMEPATH . '/target.doc', $new_content );

Or using str_replace:

$content = file_get_contents( SOMEPATH . '/source.doc' );
$new_content = str_replace( 'Microsoft', 'Openoffice', $content );
file_put_contents( SOMEPATH . '/target.doc', $new_content );

None of them doesn't work. Code runs without any exceptions, but target.doc is the same as source.doc. Replacement not performs.

I've tried a lot of different reciepts, such as regular expression modificators, iconv and so on, but nothing helps.

var_dump of $content shows raw structure of source.doc that is full of unusual characters and as I suppose some of it stops str_replace or preg_replace scanning. Can't figure out which char is it and what should I do if I'll find it.

var_dump of $new_content is identical to $content.

Thanks forward for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

演出会有结束 2024-11-15 20:27:35

如果您有一个 DOCX 文件,您需要替换其中的某些内容,它基本上是一个压缩的 xml 存档。
以下示例介绍了如何在 DOCX 文件中将单词“Microsoft”替换为“Openoffice”。

$zip = new ZipArchive;
//This is the main document in a .docx file.
$fileToModify = 'word/document.xml';
$wordDoc = "Document.docx";

if ($zip->open($wordDoc) === TRUE) {
    //Read contents into memory
    $oldContents = $zip->getFromName($fileToModify);
    //Modify contents:
    $newContents = str_replace('Microsoft', 'Openoffice', $oldContents);
    //Delete the old...
    $zip->deleteName($fileToModify);
    //Write the new...
    $zip->addFromString($fileToModify, $newContents);
    //And write back to the filesystem.
    $return =$zip->close();
    If ($return==TRUE){
        echo "Success!";
    }
} else {
    echo 'failed';
}

希望这有帮助!

If you have a DOCX file you need to replace something in, its basically a zipped up xml archive.
Here's an example on how to replace the word "Microsoft" with "Openoffice" in a DOCX file.

$zip = new ZipArchive;
//This is the main document in a .docx file.
$fileToModify = 'word/document.xml';
$wordDoc = "Document.docx";

if ($zip->open($wordDoc) === TRUE) {
    //Read contents into memory
    $oldContents = $zip->getFromName($fileToModify);
    //Modify contents:
    $newContents = str_replace('Microsoft', 'Openoffice', $oldContents);
    //Delete the old...
    $zip->deleteName($fileToModify);
    //Write the new...
    $zip->addFromString($fileToModify, $newContents);
    //And write back to the filesystem.
    $return =$zip->close();
    If ($return==TRUE){
        echo "Success!";
    }
} else {
    echo 'failed';
}

Hope this helps!

终止放荡 2024-11-15 20:27:35

我认为这就是您正在寻找的:) http://phpword.codeplex.com/ 因为文档文件不是普通的文本文件(尝试用记事本打开一个......你就会明白我的意思)

I think this is what you are looking for :) http://phpword.codeplex.com/ since doc files are not ordinary text files (try opening one with notepad..you'll get my point)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文