我在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'] : '')); ?>
最奇怪的是这只是发生在所述值是从在用户表profile_fields
DB字段($user->profile_fields['firstname']
)读出的表单字段。 Profile_fields
是SimpleAuth驱动程序使用的用户表中的标准MySQL文本字段。这个字段保存序列化的key =>值对,如名字,姓氏,地址等用户信息...如果我从DB中的非序列化字段读取相同的值并使用此值创建表单字段,则它将正确显示。
我用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 Form类生成表单字段,并转换成HTML实体某些字符的原因时使用它。
输出:
是在DB,PHP,FuelPHP这个问题......我完全失去了这里!
是的,我知道这一点,但对于所有其他形式的,我从非序列化字段数据库中读取的值,然后他们显示OK,我没有双重编码这个问题。从用户表profile_fields字段中读取和设置表单值时,这只是问题,数据正在被序列化! – 2012-04-25 10:09:28