【问题标题】:Find and store all innerhtml of div to php variable查找div的所有innerhtml并将其存储到php变量中
【发布时间】:2014-01-28 00:03:11
【问题描述】:

我正在尝试将 div 的内容存储到一个变量中。

例子:

  <div class="anything">
    <p>We don't know the content of this div</p>
    </div>

我想搜索&lt;div class="anything"&gt; 并存储开始标签和结束标签之间的所有内容。

我们还希望避免使用绝对路径名,以便它仅在当前 HTML/PHP 文件中搜索代码所在的 div

这可以通过 PHP 实现,还是只能通过 JavaScript 实现?

【问题讨论】:

  • class="anything" 是 div 独有的吗?还是在一个独有的位置,例如“总是文件中的第一个 div”?
  • 对于同一页面,需要 Javascript。
  • 感谢您的回复,@crayon 暴力:不,我们想用给定的类名捕获所有内容 .. 在 javascript 中我们得到并且可以使用 getElementsByClassName('anything').innerhtml 我想解决这使用 php,因此我们可以将此数据存储到会话或 cookie 并在另一个页面上解析它
  • 搜索整个当前文件,就像使用 preg_match 一样
  • 好吧,php 中有 DOM 操作类,可以像在 javascript 中那样抓取内容。有 php.net/DOM 或者我喜欢这个,因为它很像 jQuery 语法:simplehtmldom.sourceforge.net 我建议你不要为此使用正则表达式(例如 preg_match)。

标签: php innerhtml


【解决方案1】:

PHP 没有那么聪明。他甚至不知道自己在说什么。

PHP 是一个server-side language。当它提供一个页面时,它完全不知道 DOM(即在您的浏览器窗口中显示的内容)是什么。是的,我知道,PHP 渲染 DOM,它怎么会不知道里面有什么?

简单地说,假设 PHP 不记得他呈现的内容。他只知道在某一特定时刻,他正在传递一串字符,但仅此而已。他有点不了解全局。大图传给客户端,称为 DOM。服务器(PHP)在渲染时立即忘记了它。

像一条红鱼。

为此,您需要 JavaScript(位于客户端计算机上,因此可以完全访问渲染的 DOM),或者如果您希望 PHP 执行此操作,您必须检索一个 完整渲染的页面 首先。

因此,在 PHP 中执行您想要执行的操作的唯一方法是打印您的页面,然后您才能使用 http 请求检索它并在您的情况下使用诸如 simpleHtmlDom 之类的库来解析它.

关于如何使用 simpleHtmlDom 解析渲染页面的快速示例:

假设您知道您的页面将在http://mypage.com/mypage.php 上可用

$html = file_get_html('http://mypage.com/mypage.php');

foreach($html->find('div.anything') as $element) 
    echo $element->src . '<br>';

【讨论】:

    【解决方案2】:

    你可能需要这些的组合。

    在您的 Javascript 中:

    var content = document.getElementsByClassName("anything")[0].innerHTML();
    document.getElementByID('formfield').value(content);
    document.getElementByID('hiddenForm').submit();
    

    在您的 HTML/PHP 文件中:

    <form id="hiddenForm" action="path/to/your/script">
    <input type="hidden" name="formfield" value="" />
    </form>
    

    在您在表单操作中定义的脚本中:

    if(!empty($_POST)){
        $content = $_POST['formfield'];
        // DO something with the content;
    }
    

    您也可以通过 AJAX 发送数据,但我猜您是新手,所以您应该慢慢开始 :)

    干杯! 史蒂夫

    【讨论】:

    • 阅读您上面的评论后的简短补充。由于您想使用多个 div 执行此操作,您只需遍历 document.getElementsByClassName() 返回的所有元素
    【解决方案3】:

    您可以使用 JS 从您想要的元素中获取 .innerHTML 并将它们存储在表单的某些输入字段的 .value 中,然后使用提交按钮正常运行 PHP 表单处理。使用 .readOnly 使输入字段不被编辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      相关资源
      最近更新 更多