PHP strpos 没有找到“<”

PHP strpos does not locate "<"

我遇到了 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 无法检测到“<”符号,因此无法正确分隔层次关键字。即使当我尝试使用 < 作为分隔符进行分解时,它也不起作用。

奇怪的是,我可以创建一个测试文件并从命令行手动运行它,它完全按照需要执行,但是当我尝试在我的服务器上运行它时却没有。

知道如何解决这个问题吗?

你确定里面真的是 <,而不是 &lt; 之类的东西吗?请记住,如果您的浏览器正在呈现 html.

,则它基本上会 "lie" 给您

例如

php > var_dump(strpos('Rocks < Materials', ' < '));
int(5)
php > var_dump(strpos('Rocks &lgt; Materials', ' < '));
bool(false)
php > var_dump(strpos('Rocks < Materials', ' &lt; '));
bool(false)