解析器使用 mb_strpos 和 substr

parser use mb_strpos and substr

我有两个文件:
1: template.html(utf-8编码)内容:

<tag>
<output>
</output>
</tag>

2: 第二个文件是 parser.php(utf-8 编码)内容:

$fileContent = (file_get_contents('template.html'));

echo 'Pos #1: <b>'.$pos1 = mb_strpos($fileContent, '<'); echo '</b><br />';
echo 'Pos #2: <b>'.$pos2 = mb_strpos($fileContent, '>'); echo '</b><br />';
echo 'Substring by Pos1 & Pos2: <b>'.htmlentities(substr($fileContent, $pos1, $pos2)).'</b>';

我尝试解析标签,我需要知道它们的正确位置。当我使用 substr 时,我注意到问题输出是:

Pos #1: 0
Pos #2: 10
Substring by Pos1 & Pos2: <tag

我需要正确的方法。结果应该是:

Pos #1: 0
Pos #2: 11
Substring by Pos1 & Pos2: <tag>

提取一个子串需要一个start,它是一个位置和一个length,它不是一个位置。

您可以通过以下方式获取长度:

$length = $pos2 - $pos1 + 1;

此外,您正在处理一个 unicode 字符串并且头脑清晰可以使用 mb_strpos,但您仍然使用 substr 来提取子字符串。你应该使用 mb_substr.

mb_substr()

根据字符数执行多字节安全 substr() 操作。位置从str的开头算起。第一个字符的位置是0。第二个字符的位置是1,依此类推。

http://php.net/manual/en/function.mb-substr.php