$ _POST пуст по символам utf-8

Я работаю над многоязычным сайтом с CodeIgniter. Существует форма, которая отправляет данные контроллеру, но $_POST пуст, когда я начинаю использовать турецкие символы, такие как öçüÜĞ и т. Д.

Я установил кодировку:

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Форма:

 <form action="translations/save" method="post" accept-charset="utf-8"> <textarea rows="6" cols="60" id="editor_tr" name="editor_tr">Türkçe</textarea> </form> 

$_POST и $this->input->post('editor_tr') возвращает пустое, но я вижу исходную запись с file_get_contents("php://input") .

Это нормально работает в обычном PHP-тесте, но не работает с CodeIgniter. Возможно, мой файл .htaccess вызывает проблему, но не знаю.

Буду признателен за любую оказанную помощь.

UPDATE : Вот результат для var_dump по запросу.

var_dump($_POST) – без турецких символов

 array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(13) "turkish value" ["editor_en"]=> string(13) "english value" } 

var_dump($_POST) – с турецкими символами (вход был: Türkçe karakter , но он не отображается в $ _POST)

 array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(0) "" ["editor_en"]=> string(13) "english value" } 

ОБНОВЛЕНИЕ 2: при отладке я обнаружил, что класс system.core.Input очищает входные данные от функции _clean_input_data .

 // Clean UTF-8 if supported if (UTF8_ENABLED === TRUE) { $str = $this->uni->clean_string($str); } 

Таким образом, до того, как $_POST достигло моего контроллера, значение editor_tr уже очищено классом system.core.Utf8 в этой функции:

 function clean_string($str) { if ($this->_is_ascii($str) === FALSE) { $str = @iconv('UTF-8', 'UTF-8//IGNORE', $str); } return $str; } 

Поскольку комментарии накапливаются и, вероятно, будут упущены, я собираюсь опубликовать еще несколько предложений.

Читатели, пожалуйста, имейте в виду, что это касается значений данных $ _POST, а не отображения данных на веб-странице.

У этого пользователя есть аналогичная проблема:

Похоже, что Codeigniter нарушает $ _POST символа '£' (фунт)

Здесь есть отчет о Bitbucket аналогичного:

https://bitbucket.org/ellislab/codeigniter-reactor/issue/214/problem-when-inserting-special-characters : Удаленная ссылка: EllisLabs закрыл это репо для публики

Возможно, добавление этого в ваш index.php поможет (возможно, нет):

ini_set('default_charset', 'UTF-8');

Двойная проверка и убедитесь, что вы не используете какие-либо правила проверки или подготовки текста на поле. Такие вещи, как url_title() будут лишать этих символов.

Убедитесь, что тег формы имеет accept-charset:

 <form method="post" action="" accept-charset="utf-8"> 

Затем в контроллере используйте utf8_decode () при извлечении опубликованных значений:

 $value = utf8_decode($this->input->post('field_name')); 

Если вы не хотите использовать предыдущую версию PHP в своей установке MAMP, вы можете использовать:

$_REQUEST

Чтобы получить данные вместо $_POST

$_REQUEST – ассоциативный массив, который по умолчанию содержит содержимое $_GET , $_POST и $_COOKIE .

Дополнительная информация: http://php.net/manual/en/reserved.variables.request.php

И это возвращает все данные, которые по какой-то причине ломаются $_POST !

Это не ответ, но вы можете взглянуть и посмотреть, как все идет.

 foreach($_POST as $key => $val) { $post_data[$key] => $val; } print_r($post_data); 

затем попробуйте с сообщением CI

 foreach($_POST as $key => $val) { $post_data[$key] => $this->input->post($key); } print_r($post_data);