Я работаю над многоязычным сайтом с 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);