Отправка польских символов с помощью PHP
У меня есть проблема, и я могу найти много вопросов по этой проблеме на этой доске. Я хотел бы, чтобы польские символы по почте:
Когда я отправляю с помощью формы 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');
Пробовал оба упомянутых выше по отдельности. Но сейчас это работает.