如何使用php查找不属于html标记的第一个字母位置


How to use php to find the first letter position which is not part of html tag

如何使用php查找不属于html标记的第一个字母位置。例如下面的html字符串。我想找到字母"S"的位置,它是堆栈溢出的第一个字母。

<p><a href="http://url" target="_blank" >Stackoverflow</a> <a href="http://url" >is</a> usefull for developers.</p>

如果是用于HTML渲染,则可以使用CSS::first letter Selector

如果是一般的字符串工作,那么我还没有找到一个通用的方法,但传统的代码实现(可能较慢)可以工作:

function pos_first_letter($haystack) {
  $ret = false;
  if (!empty($haystack)) {
    $l = strlen($haystack);
    $t = false;
    for ($i=0; $i < $l; $i++) {
      if (!$t && ($haystack[$i] == '<') ) $t = true;
      elseif ($t && ($haystack[$i] == '>')) $t = false;
      elseif (!$t && !ctype_space($haystack[$i])) {
        $ret = $i;
        break;
      }
    }
  }
  return $ret;
}

然后呼叫:

$i = pos_first_letter( $your_string );
if ($i !== false) {
  $output = substr($s, 0, $i);
  $output .= '<span>' . substr($s, $i, 1) . '</span>';
  $output .= substr($s, $i+1);
}

如果使用HTML解析器,请查看DOMDocument::loadHTMLDOMDocument::loadHTMLFile。然后,您可以遍历DOM树来定位文本元素。这反过来可以通过递归遍历子元素或使用XPath来定位所需的DOM节点来实现。