替换多个文档中的HTML字符串部分

时间:2015-05-30 08:32:53

标签: javascript php html ms-word

我将现有Microsoft Word文档的部分内容保存为HTML,并在面板中动态嵌入此HTML以向用户提供说明。

除了没有出现的图像外,此功能正常。检查生成的HTML我看到显示图像的HTML是

<img src="home_files/image001.png" />

在Visual Studio中,HTML帮助页面存储在名为帮助的文件夹中,因此我更改了此行以包含帮助文件夹

<img src="help/home_files/image001.png" />

通过此更改,图像可以正确显示。

我必须从word文档生成超过50个帮助页面,因此不要手动想要更改所有图像位置,特别是如果有更改,某些页面将被重新生成。

有没有一种方法可以正确显示图像而无需编辑由Word创建的凌乱文档?

或者有更好的方法来生成Word文档的HTML版本吗?

我没有使用PDF,因为并非所有浏览器都会将PDF嵌入到网页中

8 个答案:

答案 0 :(得分:4)

  

有没有一种方法可以正确显示图像而无需编辑由Word创建的凌乱文档?

我想您可以运行一些简单的客户端代码来更改这些src标记的<img>属性。你会得到像

这样的东西
var imgs = document.querySelector("container").querySelectorAll("img");
for(var i=0;i<imgs.length;i++){
  var oldSrc = imgs[i].getAttribute();
  imgs[i].setAttribute("src", "help/"+oldSrc);
}

当然可以在任何服务器端DOM实现中完成相同的操作,请注意这些可能缺少上面代码段中描述的功能,因此可能需要重写。

  

或者有更好的方法来生成Word文档的HTML版本吗?

说实话,一般来说这是一个非常糟糕的主意(或者至少在过去)。 Word不适合这种东西,所以你可能会遇到很多麻烦。几年前我在一家公司工作,他们有一个特殊的工具只是为了清理从Word复制的HTML内容,虽然我从来没有对它做过任何维护我记得代码很复杂,所以如果你愿意的话我也不会感到惊讶遇到意想不到的问题。更合乎逻辑的是将内容写在一个首先用于Web的编辑器中。即使将粘贴复制到一个针对网络的编辑器中也可能会产生奇迹(如果编辑器是一个相当严格的编辑器)。

答案 1 :(得分:1)

<?php
function processFiles($root)
{
    $root = rtrim($root, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
    if($hDir = opendir($root))
    {
        while(false !== $filename = readdir($hDir))
        {
            if($filename == '.' || $filename == '..')
                continue;

            $file = $root . $filename;
            if(is_dir($file))
                call_user_func(__FUNCTION__, $file);
            elseif(pathinfo($file, PATHINFO_EXTENSION) == 'html')
            {
                $old = file_get_contents($file);
                $new = str_replace('home_files/', 'help/home_files/', $old);
                file_put_contents($file, $new);
            }
        }
        closedir($hDir);
    }
}

processFiles('folder/with/html-files/');

这将处理所有* .html文件并对它们执行str_replace()以修复错误的路径。

答案 2 :(得分:1)

这样的事情怎么样:

foreach (glob("path/to/files/*.doc") as $filename)
{
$file = file_get_contents($filename);
file_put_contents($filename, preg_replace("home_files/","help/home_files/",$file));
}

答案 3 :(得分:0)

将此代码添加到.htaccess,您无需使用docs :)

RewriteEngine on 
RewriteRule ^home_files/([^\.]+\.(png|jpg))$  /help/home_files/$1 [L] 

注意:要准确编写路径,有必要了解文件夹结构

答案 4 :(得分:0)

  

或者有更好的方法来生成Word文档的HTML版本吗?

如果位置是唯一的问题,您还可以使用简单的

在控制台窗口中移动图像
move home_files/*.* help/home_files

您还可以将该命令放在批处理文件中,并从桌面,开始菜单访问它,甚至将其分配给Word宏。

答案 5 :(得分:0)

从我读到的内容来看,你不是在寻找代码,而只是寻找一次性转换问题的解决方案。

这种变化实际上很容易。在文件中进行搜索和替换。下载Notepad++,安装,运行,按Ctrl-F并转到“在文件中查找”选项卡。在“查找内容”字段中,输入“"home_files/”,在“替换为”字段中输入“"help/home_files/”。您可以将“过滤器”设置为“*.*”,然后选择存储html文件的文件夹。单击“替换文件”,然后更改所有文件。无需编码。

请注意,通过在搜索中添加引号("),您可以重新运行它,它不会破坏已修复的文件。

答案 6 :(得分:0)

为什么不使用<base>代码简单地更改文档的基本路径?

这是一个简单的更改(只需在每个标题中添加单个标记)。

解析整个文档以替换所有匹配的路径更加昂贵且容易出错。

答案 7 :(得分:0)

您也可以使用Adobe Dreamweaver执行此操作。选择您的文件夹并使用全部替换。enter image description here