У меня странное поведение в FuelPHP. Я генерирую поле формы с помощью метода FuelPHP Form::input(). Проблема в том, что некоторые символы преобразуются в объекты HTML. Например, символ š
преобразуется в š
. Код генерации поля формы можно увидеть ниже, а вывод можно увидеть на картинке (первый вывод — это просто обычный текст html).
<?php echo $user->profile_fields['firstname']; ?>
<?php echo Form::input('firstname', Input::post('firstname', isset($user->profile_fields['firstname']) ? $user->profile_fields['firstname'] : '')); ?>
Самое странное, что это происходит только в поле формы, где значение считывается из поля profile_fields
БД в пользовательской таблице ($user->profile_fields['firstname']
). Profile_fields
— это стандартное текстовое поле MySQL в пользовательской таблице, используемое драйвером SimpleAuth. Это поле содержит сериализованные пары ключ => значение информации о пользователе, такие как имя, фамилия, адрес и т. д. Если я прочитаю одно и то же значение из несериализованного поля в БД и создам поле формы с этим значением, тогда оно будет отображаться правильно .
Я использую сопоставление и кодировку utf8_unicode_ci
в своей настройке БД, а локаль и кодировка FuelPHP также правильно установлены на UTF-8
.
ОБНОВЛЕНИЕ 1: взгляните на это:
//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.
выход:
Эта проблема в DB, PHP, FuelPHP... Я здесь совершенно потерялся!