phpword使用deleteBlock

2020-08-20

示例:

删除块时开始标签、结束标签、删除内容不能再同一个行

${block1}

123123213123213

${/block1}

deleteBlock的文档可能会出现office无法打开的问题

原因是源码中匹配的正则出现了问题,导致xml的标签混乱

修改源码:

public function replaceBlock($blockname, $replacement)
{
    $matches = array();
    preg_match(
        '/(<\?xml.*)(<w:p.*>\${' . $blockname . '}<\/w:.*?p>)(.*)(<w:p.*\${\/' . $blockname . '}<\/w:.*?p>)/is',
        $this->tempDocumentMainPart,
        $matches
    );

    if (isset($matches[3])) {
        $this->tempDocumentMainPart = str_replace(
            $matches[2] . $matches[3] . $matches[4],
            $replacement,
            $this->tempDocumentMainPart
        );
    }
}

/*
源正则:<w:p.*>会导致匹配的起始位置错误
'/(<\?xml.*)(<w:p.*>\${' . $blockname . '}<\/w:.*?p>)(.*)(<w:p.*\${\/' . $blockname . '}<\/w:.*?p>)/is',

修改后的正则:
'/(<\?xml.*)(<w:p>.*\${' . $blockname . '}<\/w:.*?p>)(.*)(<w:p.*\${\/' . $blockname . '}<\/w:.*?p>)/is',
*/

 

{/if}