【问题标题】:Simple PHP DOM Parser adds unwanted spaces in plaintext简单的 PHP DOM Parser 在明文中添加不需要的空格
【发布时间】:2017-01-18 01:19:44
【问题描述】:

我正在使用 PHP Simple HTML Dom Parser 从 HTML 表格中提取单元格值内容并将它们存储在数组中。

HTML

<td class="inflexion">so<span class="deviation">y</span></td>
<td class="inflexion"><span class="deviation">fui</span></td>
<td class="inflexion"><span class="deviation">er</span>a</td>
<td class="inflexion">haber sería</td>

期望的输出

大豆

时代

haber sería

PHP

function getvariations($conjtables){
    $conjtables = str_get_html($conjtables);
    $variations = [];
    foreach ($conjtables->find('td[class=inflexion]') as $inflexion) {
        $variations[] = $inflexion->plaintext;
    }
    return array_unique($variations);
}
$variations = getvariations($conjtables);
foreach ($variations as $variation) {
    echo $variation . '<br>';
}

这可行,但是,输出似乎在一些出现的 span 元素前面加上了一个不需要的空格(请参阅下面的第三项):

大豆

haber sería

关于解决这个问题有什么建议吗?我不能随意删除空格,因为某些单元格碰巧确实有多个单词,就像给出的示例中的最后一项一样。

【问题讨论】:

  • 从内部 span 获取价值并在它之后和 implode'em
  • 你看到er aaspan之外。添加一些 CSS 规则,如 .deviation {margin:0;padding:0;} 或将 a 移动到 span
  • "a" 在设计上位于 之外,我无法更改。我需要这些值来将它们存储在 MySQL 表中,因此更改 CSS 并没有多大帮助。
  • 没有真正的空格(请参阅您的第一个 HTML 块),似乎 css 规则正在添加这个空格。使用浏览器开发控制台检查它的真实空间或一些填充/边距。
  • 那里没有添加任何空格的 CSS 规则。 .deviation span 仅用于颜色编码。

标签: php simple-html-dom


【解决方案1】:

使用innertextstrip_tags 而不是plaintext

function getvariations($conjtables){
    $conjtables = str_get_html($conjtables);
    $variations = [];
    foreach ($conjtables->find('td[class=inflexion]') as $inflexion) {
        $variations[] = strip_tags($inflexion->innertext);
    }
    return array_unique($variations);
}
$variations = getvariations($conjtables);
foreach ($variations as $variation) {
    echo $variation . '<br>';
}

输出:

大豆

时代

haber sería

【讨论】:

  • 唯一的问题是它保留了我不想要的标签。例如,它没有给出 era,而是返回 era
  • 没关系。 strip_tags() 是为我做的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多