Asumir, tengo un archivo de MSWord source.doc con el siguiente contenido «Contenido de archivo de Microsoft Word».
Por ejemplo, me gustaría abrirlo a través de PHP y reemplace la palabra «Microsoft» a «Openoffice» y guardar el resultado en result.doc.
Aquí está el código que utiliza 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 el uso de 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 ningún tipo de excepciones, pero target.doc es el mismo que source.doc. La sustitución no se realiza.

He intentado un montón de diferentes reciepts, tales como la expresión regular modificators, iconv, y así sucesivamente, pero nada ayuda.

var_dump de $content muestra la estructura en bruto de source.doc que está llena de personajes inusuales y como supongo que algunos de deja de str_replace o preg_replace de escaneo. No puedo entender que char es y qué debo hacer si voy a encontrar.

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

Adelante gracias por la ayuda!

  • MS Word guarda sus archivos en un formato comprimido, por lo que no será capaz de ver o modificar los contenidos sin necesidad de descomprimirlo primero. Pero incluso si usted hace eso, usted tendría que saber los detalles del formato de archivo (hay varios), y no hay ninguna garantía de que una palabra en la página se guarda como caracteres contiguos en el archivo.
InformationsquelleAutor zeliboba | 2011-05-18

2 Comentarios

  1. 12

    Si usted tiene un archivo DOCX que usted necesita para reemplazar algo, es básicamente un zip de archivo xml.
    He aquí un ejemplo sobre cómo sustituir la palabra «Microsoft» con «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!

    • Sería agradable si usted también, agregó la fuente como un enlace a su respuesta.
    • ¿Qué quiere decir? El código fuente, o un enlace a alguna otra fuente?
    • Ah, lo siento. No entendí la respuesta. Pensé que encontró la respuesta de google. Si ese fue el caso, un enlace a la fuente sería una buena cosa. De todos modos, bienvenida de Desbordamiento de la Pila.
    • Ah, ya veo. Lo siento, voy a limpiarlo un poco. Gracias!
    • Esto funciona muy bien!! Pero un consejo, porque esto me dio un poco de pena. Si utiliza reemplazar los códigos de como lo hice yo (como {MYVAL} o etc), y no cambia…emiten el contenido ha cambiado para el navegador e inspeccionar. Usted encontrará toneladas de xml basura alrededor de su reemplazar los códigos. La construcción de su código en consecuencia.
    • cómo reemplazar muchas cadenas en este escenario? como $newContents1 = str_replace(‘Microsoft1’, ‘Openoffice1’, $oldContents); $newContents2 = str_replace(‘Microsoft2’, ‘Openoffice2’, $oldContents);
    • Acaba de hacer un reemplazo en el $newContents de nuevo. Así es como $newContents = str_replace('Microsoft1', 'Openoffice1', $oldContents); $newContents = str_replace('Microsoft2', 'Openoffice2', $newContents);
    • ¿Cómo se puede guardar en un archivo nuevo o redirigir a descargar?

  2. 3

    Creo que esto es lo que buscas 🙂 http://phpword.codeplex.com/ desde archivos doc no son los archivos de texto normales (intente abrir uno con el bloc de notas..vas a conseguir mi punto)

    • Sólo ten en cuenta que PHPWord proyecto sólo permite abrir y manipular los archivos DOCX (comprimido formato openXML de archivos). No va a funcionar si tienes que lidiar con el antiguo formato DOC.

Dejar respuesta

Please enter your comment!
Please enter your name here