解析器使用 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,依此类推。
我有两个文件:
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,依此类推。