【问题标题】:How to extract a value of an HTML input tag using PHP如何使用 PHP 提取 HTML 输入标签的值
【发布时间】:2011-03-16 01:04:25
【问题描述】:

我知道正则表达式在这里不流行,使用 php 脚本在 HTML 表单中提取输入标记值的最佳方法是什么?

例如:

一些 div/表格等。

<form action="blabla.php" method=post>

<input type="text" name="campaign">  
<input type="text" name="id" value="this-is-what-i-am-trying-to-extract">

</form>

一些 div/表格等。

谢谢

【问题讨论】:

  • 你能改写一下吗?您想在发布时获取 php 脚本中输入控件的值吗?如果是这样,那是非常基本的。也不确定在这种情况下关于正则表达式的评论有什么?
  • 这是在生成页面时(使用 php)还是在表单提交后?
  • @spinon 我认为他指的是[正确]“你不能用正则表达式解析 HTML”回复,但我认为他还没有意识到这不是他想要的方式,即使你可以。
  • 对不起,我应该更好地解释自己。我有一个字符串 var,里面有一堆 HTML。我需要从那个 HTML 字符串中提取输入标签的值,如果有帮助的话,输入标签的名称总是相同的(id)。

标签: php html extract


【解决方案1】:

如果你想从一些 HTML 字符串中提取一些数据,最好的解决方案通常是使用 DOMDocument 类,它可以将 HTML 加载到 DOM 树。

然后,您可以使用任何与 DOM 相关的方式来提取数据,例如,XPath 查询。


在这里,你可以使用这样的东西:

$html = <<<HTML
    <form action="blabla.php" method=post>

    <input type="text" name="campaign">  
    <input type="text" name="id" value="this-is-what-i-am-trying-to-extract">

    </form>
HTML;


$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);

$tags = $xpath->query('//input[@name="id"]');
foreach ($tags as $tag) {
    var_dump(trim($tag->getAttribute('value')));
}

你会得到:

string 'this-is-what-i-am-trying-to-extract' (length=35)

【讨论】:

  • 试试echo $xPath-&gt;evaluate('string(//input[@name="id"]/@value)');
【解决方案2】:
$html=new DOMDocument();
$html->loadHTML('<form action="blabla.php" method=post>
    <input type="text" name="campaign">  
    <input type="text" name="id" value="this-is-what-i-am-trying-to-extract">
    </form>');

$els=$html->getelementsbytagname('input');

foreach($els as $inp)
  {
  $name=$inp->getAttribute('name');
  if($name=='id'){
    $what_you_are_trying_to_extract=$inp->getAttribute('value');
    break;
    }
  }

echo $what_you_are_trying_to_extract;
//produces: this-is-what-i-am-trying-to-extract

【讨论】:

  • 将触发严格标准:非静态方法 DOMDocument::loadHTML() 不应被静态调用
  • 是的,我想......但它有效。不妨选择喜欢的风格。
【解决方案3】:

将表单发布到 php 页面。您想要的值将在 $_POST['id'] 中。

【讨论】:

    【解决方案4】:

    你是什么意思正则表达式不流行?我喜欢正则表达式。

    无论如何,你想要的是这样的:

    $contents = file_get_contents('/path/to/file.html');
    preg_match('/value="(\w+)"/',$contents,$result);
    

    【讨论】:

    • 每个人都喜欢它们……只是不适合 HTML 解析。请参阅stackoverflow.com/questions/1732348/… 了解有关此和 SO 的一些背景信息!
    • 哈哈我同意,正则表达式对于解析 HTML 来说是可怕的。然而,对于手头的问题,正则表达式是一个完全有效的解决方案,尽管绝对不是唯一的解决方案。
    • 如果 HTML 中还有其他具有 value 属性的输入怎么办?如果属性不是精确写入value="foo",而是Value = "foo",该怎么办。如果 HTML 包含这条评论呢?
    • 所有这些都可以在正则表达式中解决。解决方案变得越来越不优雅。我绝不提倡将正则表达式作为解析像 HTML 这样松散形式的任何内容的解决方案。该问题要求在 PHP 中针对非常具体的封闭式情况使用正则表达式。
    • 同意,您的正则表达式确实有效并且符合问题,但最好的办法是建议提问者不要为此使用正则表达式,而是提出一个包含更好实践的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多