假设我有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.doc 与 source.doc 相同。替换不执行。
我尝试了很多不同的收录,例如正则表达式修饰符,iconv等,但没有任何帮助。
var_dump
的{p} $content
显示 source.doc 的原始结构,其中包含不常见的字符,我想其中一些内容会停止str_replace
或{{ 1}}扫描。无法确定它是哪个字符,如果我找到它,我该怎么办。
preg_replace
的{p> var_dump
与$ content相同。
感谢您的帮助!
答案 0 :(得分:11)
如果你有一个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';
}
希望这有帮助!
答案 1 :(得分:3)
我认为这就是你要找的东西:) http://phpword.codeplex.com/因为doc文件不是普通的文本文件(尝试用记事本打开一个......你会明白我的意思)