2015-01-05 4 views
1

Я встречаю довольно своеобразное поведение функции PHP strpos(). Мне нужно перебрать строку ключевых слов и вывода URL-адресов для каждого ключевого слова ..PHP strpos не находит «<»

Давайте следующий пример строки:

$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 не обнаруживает символ «<», поэтому он не отделяет иерархические ключевые слова правильно. Даже когда я пытаюсь взорваться с использованием < в качестве разделителя, он не работает.

Странно, что я могу создать тестовый файл и запустить его вручную из командной строки, которая выполняется точно так, как вам нужно, но когда я пытаюсь запустить ее на своем сервере, это не так.

Любая идея о том, как решить эту проблему?

+3

Как вы вводите строку данных. Волшебно ускользнуть от> до >? Проверьте, сбросив строку и источник просмотра. – Phil

+0

Thats it! Спасибо за ввод. – AnuragBabaresco

ответ

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) 
+0

Thats полностью это. Когда я 'var_dump' строку, она ясно показывает, что она закодирована как' < ' – AnuragBabaresco

Смежные вопросы