Сравнение строк не работает с ‘==’ или с php-функцией strcmp

#php #string #select #foreach

#php #строка #выберите #foreach

Вопрос:

В поле ввода выбора я выбираю значение со сравнением строк. Но это не работает со строкой, в которой есть amp; символ. Это строка Batemans Bay amp; Eurobodalla , для которой == не работает. Я также попробовал strcmp функцию, но это также не возвращает правильное значение. Вот как выглядит мое поле выбора.

 <select name="atlas_area_filter" style="width:90%;">
  <option value="all">All</option>
  <?php
  $atlas_area_filter = get_option('atlas_area_filter');
  foreach($terms_area as $term_area){
    $term_area_name = $term_area->name;
    ?>
    <option value="<?php echo $term_area_name; ?>" <?php echo ($term_area_name ==  $atlas_area_filter) ? ' selected="selected"' : '';?>><?php echo $term_area_name; ?></option>
        <?php
  }
        ?>
</select>
 

Комментарии:

1. Можете ли вы echo $atlas_area_filter; ? Я подозреваю, что у вас есть amp;amp; вместо amp; в вашей строке.

2. Вы сбросили оба значения, чтобы посмотреть, что они на самом деле содержат?

3. Да, я повторяю это, и у него есть amp;. Обе строки кажутся похожими, но оператор сравнения не работает для этой строки.

4. Совпадает ли первая половина строк? Совпадает ли вторая половина строк?

Ответ №1:

Я имею в виду, что проблема заключается в кодировании параметров. Когда параметр содержит специальные символы по URL, он автоматически кодируется. Поэтому попробуйте добавить urldecode ( string $str ) функцию, например:

 $atlas_area_filter = urldecode(get_option('atlas_area_filter'));
 

Вы можете протестировать здесь

Комментарии:

1. Я пытался использовать urldecode, но у меня это не сработало.

2. Попробуйте добавить в свой скрипт var_dump($atlas_area_filter) , возможно, у него есть конечные пробелы или любые другие странные символы