Estoy trabajando en un sitio multilingüe con CodeIgniter. Hay una forma de que los datos de mensajes al controlador, pero $_POST
está vacía cuando comienzo a utilizar caracteres turcos como öçüÜĞ
etc.
puedo configurar el juego de caracteres a:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Forma:
<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
y $this->input->post('editor_tr')
devuelve vacío, pero puedo ver la publicación en bruto con file_get_contents("php://input")
.
Este funciona bien en una prueba PHP normal, pero no funciona con CodeIgniter. Tal vez mi archivo .htaccess está causando el problema, pero no sé.
Cualquier ayuda es muy apreciada.
ACTUALIZACIÓN: Aquí está la salida para var_dump según lo solicitado.
var_dump($_POST)
- Sin caracteres turcos
array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(13) "turkish value" ["editor_en"]=> string(13) "english value" }
var_dump($_POST)
- con caracteres turcos (La entrada era: Türkçe karakter
, pero no aparece en el $ _POST)
array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(0) "" ["editor_en"]=> string(13) "english value" }
ACTUALIZACIÓN 2 : Al depurar, descubrí que la clase system.core.Input
limpia los datos de entrada en la función _clean_input_data
.
// Clean UTF-8 if supported
if (UTF8_ENABLED === TRUE)
{
$str = $this->uni->clean_string($str);
}
Por lo tanto, antes de la $_POST
ha llegado a mi controlador, el valor editor_tr
está ya limpia por system.core.Utf8
clase en esta función:
function clean_string($str)
{
if ($this->_is_ascii($str) === FALSE)
{
$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
}
return $str;
}
¿Has probado mbstring? y la corrección asociada para [codeigniter] (http://www.haughin.com/2010/02/23/building-utf8-compatible-codeigniter-applications/) –
'Mi archivo .htaccess tal vez está causando el problema, pero no sé .' ¿Considera proporcionarlo entonces? – Khez
@Madmartigan Disculpa, fue un error tipográfico. – Ozay