0

我有一个很长的 HTML 文档。它有一个表格,宽度可能在 1000 到 1200 像素之间变化(每天都在变化)。大量文本、表格和有时嵌入的 PDF。

我想在另一个页面上显示一个简短的预览(如在线报纸上,您可以在其中找到标题、几句话,也许是一张图片,然后是完整文章的链接)。

第一个问题:我想要预览的页面只有 800 像素宽。

我的第一个想法是(为了只显示 10 句话):

$lineswritten=0;
$stream=fopen($document,"r");
while ((($line = fgets($stream)) !== false)&&($lineswritten<10))
{

   if($lineswritten>=10)
   {
         echo "$line";

         $line=trim($line);
         if($line!="")          // if line is blank don't count it as text
         {
           $lineswritten=$lineswritten+1;
         }
   }
 }
 fclose($stream);

但我有一些问题。 首先:标签。主页面和预览页面都是用表格构建的。如果在预览的前 10 行中,他们打开了一个表格,但他们没有关闭它,那么预览页面的所有布局都是混乱的。

我用正则表达式检查表标签(和),但我还没有研究过这些表达式。是否可以检查这些标签并仅在第 10 行之后写入它们?

第二个问题。图片。我可能有一个非常大的图像。是否可以仅从标签中检索图像路径?如果可能的话,我可以检查图像尺寸并最终缩小它。

第三个问题 我嵌入了以下代码的pdf:

<iframe src="http://docs.google.com/gview?  url=http://www.mywebsite.ch/pdffolder/8121202.pdf&amp;embedded=true" style="width:990px; height:700px;" frameborder="0"></iframe> 

显然宽度和高度并不那么容易:它们也可能会有所不同。是否可以识别这样的字符串并将它们写在预览页面上,高度为:200px,固定宽度为 700px?

非常感谢!

4

1 回答 1

0

不要使用正则表达式来操作 HTML,而是使用 php 的DOM 工具

例如,第二个问题(从图像中获取图像路径)可以通过使用DOMDocument::getElementByTageName方法来解决,如下所示:

$dom = new DOMDocument;
$dom->loadHTML($table);
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
    $src = $image->getAttribute('src');
    //do whatever with the image sorce
}

这段代码的意图更加清晰,您不必编写非常长、复杂且难以管理的正则表达式来完成它。

于 2013-01-17T21:37:45.283 回答