str_replace reemplazar quitar preg_replace preg_match pcre_caseless patron parentesis ejemplo caracteres php ms-word preg-replace str-replace

reemplazar - Edición de PHP documento de Microsoft Word str_replace y preg_replace no funcionan



reemplazar caracteres php (2)

Supongo que tengo el archivo MSWord source.doc con el siguiente contenido "Contenido del archivo de Microsoft Word". Por ejemplo, me gustaría abrirlo a través de PHP y reemplazar la palabra "Microsoft" por "Openoffice" y guardar el resultado en result.doc . Aquí está el código usando 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 );

O usando str_replace :

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

Ninguno de ellos no funciona. El código se ejecuta sin excepciones, pero target.doc es lo mismo que source.doc . El reemplazo no funciona.

He intentado muchos reciepts diferentes, como modificadores de expresiones regulares, iconv, etc., pero nada ayuda.

var_dump of $content muestra la estructura sin procesar de source.doc que está llena de caracteres inusuales y, como supongo, algunos de ellos detienen str_replace o preg_replace scanning. No puedo entender qué char es y qué debo hacer si lo encuentro.

var_dump de $new_content es idéntico a $ contenido.

¡Gracias de antemano por cualquier ayuda!


Creo que esto es lo que estás buscando :) http://phpword.codeplex.com/ ya que los archivos doc no son archivos de texto ordinarios (intenta abrir uno con el bloc de notas ... verás mi punto)


Si tiene un archivo DOCX necesita reemplazar algo, básicamente es un archivo xml comprimido. Aquí hay un ejemplo de cómo reemplazar la palabra "Microsoft" por "Openoffice" en un archivo DOCX.

$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''; }

¡Espero que esto ayude!