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 フィールドから値が読み取られるフォーム フィールドでのみ発生することです( $user->profile_fields['firstname']
)。Profile_fields
SimpleAuth ドライバーが使用するユーザー テーブルの標準の MySQL テキスト フィールドです。このフィールドには、名、姓、住所などのユーザー情報のシリアル化されたキー=>値のペアが保持されます... DBのシリアル化されていないフィールドから同じ値を読み取り、この値でフォームフィールドを作成すると、正しく表示されます.
utf8_unicode_ci
DBセットアップで照合とエンコーディングを使用し、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 にあるのでしょうか... ここで完全に迷ってしまいました!