Переменные формы PHP и POST - HTML-кодированные строки - PullRequest
0 голосов
/ 26 августа 2010

Я не силен в своих знаниях PHP, но я никогда не видел этого раньше. В конфигурационном файле есть список опций, определенных в массиве, например:

$testarray[] = "None";
$testarray[] = "Item 1 with normal text";
$testarray[] = "Item 2® with html encoded string";
$testarray[] = "Item3® with another html encoded string";

Итак, теперь, когда форма генерируется, для каждого цикла просто создается список переключателей:

foreach ( $testarray as $key=>$item){
echo '<div id="padBottom"><input type="radio" name="formItem"';
    if ( $item == $_SESSION['ss']['selection']) echo ' checked="checked"';
    echo ' value="' . $item. '" />' . $item. '</div>';
}

Пока все хорошо, форма генерируется так, как должна. Часть, которая не работает, является частью оператора If. На странице, на которую отправляется эта форма, он просто вызывает $_SESSION['ss']['selection'] = $_POST['formItem'];. Когда это происходит, значение, которое входит в сессию, является фактическим зарегистрированным символом торговой марки, а не '&reg;', как я ожидал. В результате, если вы выберете элемент с сущностью в кодировке HTML, мы не получим совпадения, и ваш выбор будет потерян. В этом примере выбор первого или второго параметра приводит к тому, что выбирается соответствующий переключатель - если вы выберите вариант 3 или 4, то при возврате к этому экрану не будет выполнено никакого выбора.

Дополнительная информация - кодировка для этой страницы - UTF-8, если здесь есть какая-то разница.

То, что я пробовал

  1. htmlspecialchars для переменной POST на следующей странице: результат, ничего, по-прежнему отображается фактический символ.
  2. htmlspecialchars в значении формы для каждой опции радио: результат, я получаю &amp;reg; как часть моего значения, которое не отображается хорошо.

Ответы [ 2 ]

3 голосов
/ 26 августа 2010

Некоторые символы (включая амперсанды) имеют особое значение в HTML, вы должны представлять их как объекты , если не хотите, чтобы это специальное значение вступало в силу.

В данном случае это переменная, которую вы вставляете в атрибут value, которую вам нужно закодировать.

1 голос
/ 26 августа 2010

Возможно, будет лучше, если вы используете индекс элемента, а не его содержимое, поскольку в данном случае индекс - это просто число:

foreach ( $testarray as $key=>$item) {
  echo '<div id="padBottom"><input type="radio" name="formItem"';
  if ( $key == $_SESSION['ss']['selection']) echo ' checked="checked"';
  echo ' value="' . $key .'" />' . $item. '</div>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...