2014-05-19 4 views
0

codeigniter + doctrine에 내장 된 간단한 웹 응용 프로그램에서 이상한 행동이 있습니다. 악센트 부호가있는 문자를 사용하여 doctrine을 사용하여 문자열을 안전하게 저장하는 방법

내가 로컬 아파치 서버가 나는 같은 코드를 공유 호스팅 두 앱 모두는이 데이터베이스가 UTF-8 유니 코드 문자 집합 및 utf8_general_ci 정렬을 사용

(공유 호스팅에서 호스팅) 동일한 데이터베이스에 연결합니다.

모든 양식과 페이지에는 이와 같이 메타 문자 세트가 있습니다.

<!DOCTYPE html> 
<html lang="es" xml:lang="es"> 
<head> 
    <meta charset="utf-8"> 

문제는 하나 개의 서버 내가 보는 다른 서버에서 (원격 하나) 내가 그것을 저장하고 내가 잘 볼 수 있지만, 나는 "institució"같은 것을 넣어 (의 현지 가정 해 봅시다)에서, "instituci"나는 공유 호스팅에 가서 그런

같은, 나는 "institució"에 단어를 수정하고 나는이 단어가 "institució"나는 할 수 없습니다

로 표시됩니다 로컬 서버에 표시 한 후 "utf8_decode"또는 "utf8_encode"를 사용하십시오. 왜냐하면 어디에서이 문자열을 저장했는지에 따라 디코딩하거나 인코딩해야하기 때문입니다.

일부 설정이 누락되었지만 어디서부터 시작해야할지 모르겠습니다.

지역적으로 저는 매버릭스의 기본 apache2 서버를 설치했습니다.

난 후 데이터를 검색하고이 같은 교리 객체에 저장 :

$question->setQuestion($this->input->post('question')); 

내가 CodeIgniter의 교리이 알아서 생각했다.

감사합니다.

답변

0

해결!

나는 더 많은 참을성이 있었음에 틀림 없다. 이 솔루션은 응용 프로그램/라이브러리/교리/doctrine.php

새로운 옵션이라고

driverOptions에 위치한 connectionOptions 배열에 새로운 옵션을 추가하는 것입니다 그리고 그것은 다음과 같습니다

 'driverOptions' => array(
      1002=>'SET NAMES utf8' 
     ) 

그래서 전체 connectionOptions입니다 like :

// Database connection information 
    $connectionOptions = array(
     'driver' => 'pdo_mysql', 
     'user' => $db['default']['username'], 
     'password' => $db['default']['password'], 
     'host' => $db['default']['hostname'], 
     'dbname' => $db['default']['database'], 
     'charset' => 'utf8', 
     'driverOptions' => array(
      1002=>'SET NAMES utf8' 
     ) 
    ); 

이 새로운 옵션은 서버에 따라 다른 동작을하는 문제를 해결했습니다.

누군가 도와 줄 수 있기를 바랍니다.

관련 문제