我遇到了PHP strpos()函数的一个相当特殊的行为.我需要遍历一串关键字并输出每个关键字的URL.
让我们采取以下示例字符串:
$elementText = "Bluffs, Cliffs, Grasses, Oceans, Rocks < Materials";
Run Code Online (Sandbox Code Playgroud)
这是功能:
<?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; ?>
Run Code Online (Sandbox Code Playgroud)
但是,在我的服务器上,PHP无法检测到"<"符号,因此不能正确分离分层关键字.即使我试图爆炸使用<作为分隔符,它也不起作用.
奇怪的是,我可以创建一个测试文件并从命令行手动运行,命令行完全按照需要执行,但是当我尝试在我的服务器上运行它时却没有.
关于如何解决这个问题的任何想法?
你确定它真的是<在那里,而不是像<?请记住,如果它是渲染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)
Run Code Online (Sandbox Code Playgroud)