問題があり、この掲示板でこの問題に関する多くの質問を見つけることができます。POST でポーランド語の文字を希望します。
POSTでフォームを送信すると、次のデータが送信されます。
Ciało wielbłądów osiąga długość do 3 m. Ich szyja jest długa, łukowato wygięta; głowa długa,
PHP は次のように表示します。
<p>Ciało wielbłąd&oacute;w osiąga długość do 3 m. Ich szyja jest długa, łukowato wygięta; głowa długa,
直接実行する場合でも:
exit(print_r($_POST));
ページの上部。
私はこれまでに何をしましたか?
HTMLエンティティを使用しようとしました
exit(htmlentities($_POST['EditorField'], ENT_NOQUOTES, 'UTF-8'));
utf8_decode を使ってみた
exit(utf8_decode($_POST['EditorField']));
内部エンコーディングを UTF-8 に設定しました:
mb_internal_encoding('UTF-8');
これは、フレームワークの初期化クラスの非常に早い段階で行われます。私が見逃していて、とにかく機能しているものがあることを願っています。
編集:
以下を追加しました:
<form action="" method="post" accept-charset="utf-8">
accept-charset="utf-8"
そして、TinyMCE エディタを削除しました
まだ運がない!
CiaÅ‚o wielbłądów osiÄ…ga dÅ‚ugość do 3 m. Ich szyja jest dÅ‚uga, Å‚ukowato wygiÄ™ta; gÅ‚owa dÅ‚uga
編集: その間、私は次のことを見つけました:
追加:
header('Content-Type: text/html; charset=utf-8');
これにより、$_POST が正しく送信されるようになります。これは次と同じだと思いました:
mb_internal_encoding('UTF-8');
しかし、私は間違っていました。
ただし、まだ発生する小さな問題があります。PDO でデータを保存すると、データが切り捨てられます。
私の意見では、接続を初期化するためにまだ正しい設定を使用しています
///########==================================================
///######## SET OPTIONS FOR PDO IN ARRRAY FORMAT
///########==================================================
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
///########==================================================
///########==================================================
///######## TRY CONNECTING WITH THE PDO DATABASE
///########==================================================
try {
///######## MAKE THE CONNECTION AND ASSIGN IT TO : DBH
self::$DbConnection[$ConnectionName] = new PDO(
$dsn,
self::$DbCredentials[$ConnectionName]['username'],
self::$DbCredentials[$ConnectionName]['password'],
$options
);
///######## SET UTF 8
self::$DbConnection[$ConnectionName]->exec('SET CHARACTER SET utf8');
}
///######## CATCH ANY ERRORS
catch (PDOException $e) {
///######## IF ANY ERRORS JUST SHOW THEM
///self::$error = $e->getMessage();
exit(self::errorField('<strong>PDO database connection error</strong><br />'.$e->getMessage()));
}
///########==================================================
(* もちろん、どこかで間違いを犯します。しかし、今はそれを見つけなければなりません... *)
解決しました!! 解決策を見つけたので、誰かがまだこの投稿をアップしてくれることを願っています。そしてそれは、この掲示板で指摘されている他のすべての問題とはまったく異なる方向性を示しています。
必須 :
header('Content-Type: text/html; charset=utf-8'); mb_internal_encoding('UTF-8');
しかし、削除されました!! :
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
私も削除しました:
self::$DbConnection[$ConnectionName]->exec('SET CHARACTER SET utf8');
上記の両方を個別に試しました。しかし、今では機能します。