我在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