从cURL请求正确格式化HTML

时间:2012-05-02 04:10:47

标签: php html curl

我正在开发一个applet,允许用户输入新闻文章或其他网页(日语)的URL,并在我的页面中的iFrame中查看该页面的内容。这个想法是,一旦内容被加载到页面中,用户可以使用他们的光标突出显示单词,该光标将所选文本存储在一个数组中(用于翻译/添加到个人术语词典)并将文本环绕在一个红色框中(div)根据我的域上定义的样式表。为此,我使用cURL检索外部页面的HTML并将其转储到iFrame的源代码中。

但是,我一直遇到检索到的HTML的主要格式问题。最大的问题是保留样式表,为了解决这个问题,我使用DOMDocument将标签添加到检索到的HTML部分。这适用于某些页面/ URL,但是对于许多其他人来说,输出HTML仍然存在很多样式问题。例如,div图层相互碰撞,对齐关闭,背景缺失。这有点问题,因为我需要将输出HTML嵌入到新的中,以使onClick javascript函数在嵌入式内容中传递文本选择起作用,这意味着生成的源最终看起来像这样:

<div onclick="parent.selectionFunction()" id ="studyContentn">

<!-- HTML of output from cURL, including doctype declarations and <html>,<head> tags -->

</div>

在大多数情况下,我一直遇到的很多格式问题似乎都很随意。我已经尝试使用PHP Tidy来清除HTML中的输出,但这也仅适用于某些页面,但不适用于其他页面。我有点怀疑它可能与使用DOMDocument时奇怪解析的CDATA声明有关,但我不确定。

有没有办法可以保证cURL的HTML输出能够在所有实例中正确,忠实地呈现?或者是否有更好的方法可以做到这一点?我已经尝试了一些不同的方法来解决这个问题,每个方法都接近一个解决方案,但也带来了自己的新问题。

谢谢 - 让我知道我是否可以澄清任何事情。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您正在尝试提取完整网页的html并将其显示在您的域下,在您的HTML中。这总是很棘手,很多java脚本会破坏,相对url会出错,正如你所提到的,样式也是如此。您可能还会更改页面显示的尺寸。这些都可以解决,但您将与每个新网站进行艰苦的战斗,或者当前网站更改设计

我可能会对问题采取不同的方法。您可能希望将浏览器插件编写为外部网站的界面。然后您的applet可以位于功能和测试(希望)网站的顶部。然后,您可以专注于您需要为您的applet做什么,而不是一个永无止境的hid问题列表。

答案 1 :(得分:0)

我正在尝试做类似的事情。保存格式非常困难,网页中的JS脚本使事情变得复杂。我终于完全放弃了完全显示原始格式的想法,但是做了一个解决方法:

  1. 仅选择您感兴趣的标题,链接,列表和段落。
  2. 将您的ownsite的域路径添加到链接。
  3. 您可以自己的课程包装标题,链接等项目。
  4. 显示它 在您的情况下,您想要选择文本并存储它,这是另一个主题。我所做的是将HTMl解析为两个级别,然后很容易进行选择。请记住,IE和Firefox / Chrome需要单独处理。