1

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

但是,我一直遇到检索到的 HTML 的主要格式问题。最大的问题是保留样式表,为了解决这个问题,我使用 DOMDocument 将标签添加到检索到的 HTML 部分。这适用于某些页面/URL,但对于许多其他页面/URL,输出 HTML 仍然存在许多样式问题。例如,div 层相互碰撞,对齐关闭,背景丢失。这会带来一些问题,因为我需要将输出 HTML 嵌入到新的 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 输出在所有情况下都能正确且忠实地呈现?还是有更好的方法来做到这一点?我尝试了很多不同的方法来解决这个问题,每种方法都更接近解决方案,但也带来了自己的新问题。

谢谢 - 如果我能澄清任何事情,请告诉我。

4

2 回答 2

0

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

我可能会采取不同的方法来解决这个问题。您可能想编写一个浏览器插件作为外部网站的接口。然后您的小程序可以位于功能和测试(希望)站点的顶部。然后,您可以专注于您需要为您的小程序做的事情,而不是无休止的繁琐 html 问题列表。

于 2012-06-07T14:28:29.843 回答
0

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

  1. 仅选择您感兴趣的标题、链接、列表、段落。
  2. 将您自己网站的域路径添加到链接。
  3. 你可以用你自己的类来包装标题、链接等项目。
  4. 在您想要选择文本并存储它的情况下显示它,这是另一个主题。我所做的就是在两个层次上解析HTMl,然后很容易进行选择。请记住 IE 和 Firefox/Chrome 需要分开处理。
于 2012-06-15T09:25:38.413 回答