2012-04-24 3 views
0

У меня странное поведение в FuelPHP. Я генерирую поле формы с помощью метода FuelPHP Form :: input(). Проблема в том, что некоторые символы преобразуются в объекты HTML. Например, символ š преобразуется в š. Код генерации поля формы можно увидеть ниже, и вывод можно увидеть на картинке (первый вывод - это просто обычный HTML-текст).Значение поля формы FuelPHP преобразует некоторый символ в объекты HTML

<?php echo $user->profile_fields['firstname']; ?> 
<?php echo Form::input('firstname', Input::post('firstname', isset($user->profile_fields['firstname']) ? $user->profile_fields['firstname'] : '')); ?> 

enter image description here

самое странное это происходит только в поле формы, где значение считывается из БД profile_fields поля в таблице пользователей ($user->profile_fields['firstname']). Profile_fields - стандартное текстовое поле MySQL в пользовательской таблице, используемое драйвером SimpleAuth. Это поле содержит сериализованные пары ключей => значений пользователя, такие как имя, фамилия, адрес и т. Д. Если я прочитал одно и то же значение из несериализованного поля в БД и создаю поле формы с этим значением, то оно будет отображаться правильно ,

Я использую utf8_unicode_ci сортировку и кодировку в настройках моей БД, а локаль и кодирование FuelPHP также правильно установлены на UTF-8.

Update1: посмотри на это:

//values read from MySQL DB, via FuelPHP orm, unserialized 
echo $user->profile_fields['firstname'] . ' ' . $user->profile_fields['lastname']; 
echo '<br>'; 

//same values serialized and assigned to PHP array var 
$test = serialize(array('firstname'=>'Urška', 'lastname'=>'Neumüller')); 
var_dump($test); 

echo '<br>'; 
$test2 = unserialize($test); 
var_dump($test2); 

echo '<br>'; 
echo '<input type="text" value="'.$test2['firstname'].'">'; 
echo '<input type="text" value="'.$test2['lastname'].'">'; 

echo '<br>'; 
echo '<input type="text" value="'.htmlspecialchars($test2['firstname']).'">'; 
echo '<input type="text" value="'.htmlspecialchars($test2['lastname']).'">'; 

echo '<br>'; 
echo '<input type="text" value="'.$user->profile_fields['firstname'].'">'; 
echo '<input type="text" value="'.$user->profile_fields['lastname'].'">'; 

echo '<br>'; 
echo '<input type="text" value="'.htmlspecialchars($user->profile_fields['firstname']).'">'; 
echo '<input type="text" value="'.htmlspecialchars($user->profile_fields['lastname']).'">'; 

htmlspecialchars используются здесь, потому что FuelPHP форма класс использовать его при создании поля формы и является причиной некоторых символов преобразуются в HTML сущности.

выход:

enter image description here

Является ли эта проблема в БД, PHP, FuelPHP ... Я совершенно потерял здесь!

ответ

2

Вам нужно очень четко смотреть на то, что вы делаете.

FuelPHP по умолчанию кодирует на выходе, что означает, что все данные, отправленные в представление, будут закодированы в html. В этом случае $ user, который отправляется с контроллера на представление, будет закодирован.

Ваш массив $ test2 создается внутри представления и поэтому не будет закодирован.

Теперь, когда вы используете значение $ user в Form :: input(), значение будет подготовлено (как правильно указано Фрэнком), которое будет кодироваться снова. Например, «& amp;» будет преобразован в «& amp; amp;» и приведет к описанному вами поведению. То же самое, если вы вручную кодируете значение из $ user, как показывает ваш пример.

Итак:

  • передать переменную в представлении без кодирования (может быть опасно!)
  • отключить готовя, как Франк описал
  • обновление до последней 1.1/develop branch, который по умолчанию отключен по двойной кодировке
0

Обычно специальные символы кодируются на выходе по соображениям безопасности. Вы можете отключить это, если вы установите форму condig param prep_value на false или подайте поле ввода attr "dont_prep" => true.

+0

yes Я знаю это, но для всех других форм, где я читал значения из базы данных из несериализованных полей, они отображают ОК, и у меня нет Эта проблема. Это только проблема при чтении и настройке значений формы из поля user_fields таблицы пользователя, где данные сериализуются! –

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