如何使用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::loadHTML
或DOMDocument::loadHTMLFile
。然后,您可以遍历DOM
树来定位文本元素。这反过来可以通过递归遍历子元素或使用XPath
来定位所需的DOM节点来实现。