我正在编写一个解析给定 URL 的 PHP 页面。我能做的就是仅找到第一个出现的值,但是当我回显它时,我得到另一个值而不是给定的值。
这就是我到目前为止所做的。
<?php
$URL = @"my URL goes here";//get from database
$str = file_get_contents($URL);
$toFind = "string to find";
$pos = strpos(htmlspecialchars($str),$toFind);
echo substr($str,$pos,strlen($toFind)) . "<br />";
$offset = $offset + strlen($toFind);
?>
我知道可以使用循环,但我不知道循环体的条件。
我怎样才能显示我需要的输出?
发生这种情况是因为您正在使用strpos
on the htmlspecialchars($str)
但你正在使用substr
on $str
.
htmlspecialchars()
将特殊字符转换为 HTML 实体。举个小例子:
// search 'foo' in '&foobar'
$str = "&foobar";
$toFind = "foo";
// htmlspecialchars($str) gives you "&foobar"
// as & is replaced by &. strpos returns 5
$pos = strpos(htmlspecialchars($str),$toFind);
// now your try and extract 3 char starting at index 5!!! in the original
// string even though its 'foo' starts at index 1.
echo substr($str,$pos,strlen($toFind)); // prints ar
要解决此问题,请使用相同的haystack在这两个函数中。
要回答您查找一个字符串在其他字符串中所有出现的其他问题,您可以使用第三个参数strpos http://php.net/manual/en/function.strpos.php, offset,指定从哪里搜索。例子:
$str = "&foobar&foobaz";
$toFind = "foo";
$start = 0;
while(($pos = strpos(($str),$toFind,$start)) !== false) {
echo 'Found '.$toFind.' at position '.$pos."\n";
$start = $pos+1; // start searching from next position.
}
Output:
在位置 1 找到 foo
在位置 8 找到 foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)