2011-04-25 5 views
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 파일이 문제를 일으키는 것일 수도 있지만 몰라요.

도움을 주시면 감사하겠습니다.

업데이트 : 다음은 요청한대로 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 : 디버깅 할 때 _clean_input_data 함수의 입력 데이터를 system.core.Input 클래스가 지우는 것을 발견했습니다. $_POST 내 컨트롤러에 도달하기 전에

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

따라서는 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; 
} 
+0

mbstring을 사용해 보셨습니까? [codeigniter]에 대한 관련 픽스 (http://www.haughin.com/2010/02/23/building-utf8-compatible-codeigniter-applications/) –

+0

'내 .htaccess 파일이 문제의 원인 일 수 있지만 몰라요. 그런 다음 그것을 공급하는 것을 고려해야합니까? – Khez

+0

@Madmartigan 죄송합니다. 오타였습니다. – Ozay

답변

6

의견이 겹쳐서 간과하기 쉽기 때문에 몇 가지 제안 사항을 게시 할 예정입니다.

독자는 $ _POST 데이터 값을 처리하고 웹 페이지에 데이터를 표시하지 않는다는 점에 유의하십시오.

https://bitbucket.org/ellislab/codeigniter-reactor/issue/214/problem-when-inserting-special-characters : 제거 링크 : EllisLabs이 REPO를 폐쇄했다

Codeigniter seems to break $_POST of '£' character (Pound)

유사한의의 Bitbucket에 여기에 보고서가 있습니다 :

이 사용자는 비슷한 문제를 갖고있는 것 같아요 일반에 공개

색인에 추가 할 수 있습니다.

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

더블 체크를하고 유효성 검사를 실행하거나 필드에 규칙을 준비하고 있지 않은지 확인 : (아마) 도움이 될 것입니다. url_title()과 같은 문자는 해당 문자를 삭제합니다.

+1

첫 번째 링크에서 문제가 해결되었습니다. 휴. did not는 MAMP & PHP가 이것을 초래할 것이다라고 생각한다. 그러나 당신은 결코 모르고있다. 고마워요! – Ozay

+0

대단한 소식입니다. 반응이 빠르고 적절한 세부 정보를 신속하게 제공 해주셔서 감사합니다. 프로젝트와 함께 행운을 빌어 요. –

+0

감사합니다 Madmartigan,이 문제가 다른 사람들에게 도움이되기를 바랍니다. – Ozay

-1

,하지만 당신은을 할 수 있습니다 보고 모든 것이 오는 방법을 참조하십시오.


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

을 다음 CI의 게시물 시도

,536,

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

print_r($post_data); 
6

양식 태그 동의 - 문자 집합이 있는지 확인 : 컨트롤러 사용 utf8_decode에서 다음

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

() 게시 된 값을 가져올 때 :

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

이것은 받아 들여진 해결책이거나, 적어도 upvoted되어야합니다. Ellislab이 제공 한 bitbucket 솔루션 (@WesleyMurch 응답)은 Ellislab이 repo를 폐쇄 한 이후 더 이상 사용할 수 없습니다. – Lvkz

1

를 사용하지 않으려면 당신의 MAMP의 소 instalation의 이전 PHP 버전은 사용할 수 있습니다 :

$_REQUEST

,691

대신 $_POST

$_REQUEST의 데이터를 얻으려면 기본 $_GET, $_POST$_COOKIE의 내용을 포함하여 해당 연관 배열입니다.

More info: http://php.net/manual/en/reserved.variables.request.php

그리고 그 어떤 이유로 $_POST가 파괴되는 모든 데이터를 반환!

관련 문제