Отправка польских символов с помощью 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ó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&oacute;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');

Пробовал оба упомянутых выше по отдельности. Но сейчас это работает.

0 ответов

Другие вопросы по тегам