PHP strpos没有找到"<"

Anu*_*sco 1 php string

我遇到了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无法检测到"<"符号,因此不能正确分离分层关键字.即使我试图爆炸使用<作为分隔符,它也不起作用.

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

关于如何解决这个问题的任何想法?

Mar*_*c B 6

你确定它真的是<在那里,而不是像&lt;?请记住,如果它是渲染html,您的浏览器将基本上"撒谎".

例如

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)
Run Code Online (Sandbox Code Playgroud)