我在 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
DB 字段读取值的表单字段中。是 SimpleAuth 驱动程序使用的用户表中的标准 MySQL 文本字段。该字段包含用户信息的序列化键=>值对,例如名字,姓氏,地址等...如果我从数据库中的非序列化字段中读取相同的值并使用该值创建表单字段,那么它将正确显示.$user->profile_fields['firstname']
Profile_fields
我在我的数据库设置中使用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 中是否存在这个问题……我完全迷失了!