Я не силен в своих знаниях 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'];
. Когда это происходит, значение, которое входит в сессию, является фактическим зарегистрированным символом торговой марки, а не '®'
, как я ожидал. В результате, если вы выберете элемент с сущностью в кодировке HTML, мы не получим совпадения, и ваш выбор будет потерян. В этом примере выбор первого или второго параметра приводит к тому, что выбирается соответствующий переключатель - если вы выберите вариант 3 или 4, то при возврате к этому экрану не будет выполнено никакого выбора.
Дополнительная информация - кодировка для этой страницы - UTF-8, если здесь есть какая-то разница.
То, что я пробовал
- htmlspecialchars для переменной POST на следующей странице: результат, ничего, по-прежнему отображается фактический символ.
- htmlspecialchars в значении формы для каждой опции радио: результат, я получаю
&reg;
как часть моего значения, которое не отображается хорошо.