我遇到了PHP的strpos()函数的一种非常奇怪的行为。我需要循环遍历一个关键字字符串,并将URL输出到每个关键字。
让我们以下面的字符串为例:
$elementText = "Bluffs, Cliffs, Grasses, Oceans, Rocks < Materials";以下是功能:
<?php
$i = 0;
$hierarchySeparator = " < ";
$subjects = explode(", ", $elementText);
// loop through keywords
foreach ($subjects as $subject) :
// look for hierarchical keywords
$found = strpos($subject, $hierarchySeparator);
if($found !== false) :
// extract and loop through hierarchical list
$subSubjects = explode($hierarchySeparator, $subject);
$j = 1;
foreach ($subSubjects as $subSubject) : ?>
<a href="<?php echo url('/mySearch?q=' . $subSubject) ; ?>"><?php echo $subSubject; ?></a>
<?php
// Re-ouput all relevant < signs
if($j < count($subSubjects)) {
echo " < ";
}
$j++;
endforeach;
else : ?>
<a href="<?php echo url('/mySearch?q=' . $subject) ; ?>"><?php echo $subject; ?></a>
<?php endif;
// output commas to "nicefy" list output
$i++;
if($i < count($subjects)) {
echo ",";
}
endforeach; ?>但是,在我的服务器上,PHP无法检测到"<“符号,因此不能正确地分离分层关键字。即使我试图使用<作为分隔符来爆炸,它也不起作用。
奇怪的是,我可以创建一个测试文件,并从命令行手动运行它,它完全按照需要执行,但是当我试图在我的服务器上运行它时,它没有。
知道怎么解决这个问题吗?
发布于 2015-01-05 20:23:14
你确定它真的是一个<,而不是像<这样的东西吗?记住,如果你的浏览器呈现的是html,它本质上会对你“撒谎”。
例如:
php > var_dump(strpos('Rocks < Materials', ' < '));
int(5)
php > var_dump(strpos('Rocks &lgt; Materials', ' < '));
bool(false)
php > var_dump(strpos('Rocks < Materials', ' < '));
bool(false)https://stackoverflow.com/questions/27787223
复制相似问题