解析器使用mb_strpos和substr

时间:2015-08-08 06:35:04

标签: php parsing strpos

我有两个文件:
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>

1 个答案:

答案 0 :(得分:0)

提取子字符串需要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