我有一个很长的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&embedded=true" style="width:990px; height:700px;" frameborder="0"></iframe>
显然宽度和高度并不那么容易:它们也可能不同。是否可以识别这样的字符串并将其写在预览页面上,高度为:200px,固定宽度为700px?
非常感谢!
答案 0 :(得分:0)
不要使用正则表达式来操纵HTML,而是使用php的DOM tools。
例如,第二个问题(从图像获取图像路径)可以通过使用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
}
此代码的目的更清晰,您不必编写一个非常长,复杂且难以管理的正则表达式来完成它。