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テキストフィールドです。このフィールドは、firstname、lastname、addressなどのユーザー情報のシリアル化されたkey => valueのペアを保持します... DB内の非シリアル化フィールドから同じ値を読み取り、この値を持つフォームフィールドを作成すると、正しく表示されます。
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フィールドからフォームの値を読み取り設定する場合にのみ問題になります。 –