2011-05-10 3 views
2

저는 PHP/MySQL 문자 집합과 관련하여 모범 사례에 대한 일반적인 질문이있는 Cake PHP에 대해 알게되었습니다. 여기에서 대답 할 수 있기를 바랍니다.라틴어 문자가 아닌 경우

My (practice) 시스템에는 영화의 mysql 테이블이 포함되어 있습니다. 이 목록은 Excel 시트에서 가져와 CSV로 내보내고 phpMyAdmin을 통해 가져 왔습니다.

"이국적인"글리프가있는 제목이 브라우저에서 렌더링하는 데 문제가 있음을 발견했습니다 (예 : The Amélie). Cake 또는 plain PHP를 사용하면 htmlentities을 통해 é으로 변환되지 않는 한 ?으로 렌더링됩니다. 특수 문자와의 링크는 전혀 렌더링되지 않습니다.

내 케이크 입력 양식을 사용하여 <alt>0233을 입력하는 경우, 이는 소스에서 올바르게 렌더링되지만 을 통해 htmlentities을 통해 올바르게 렌더링됩니다. 빠른 후

는 SO 따라서 I

  • <meta> 물건이었다 확인했다 UTF-8
  • 에 PHP 소스 및 CSV 파일의 인코딩을 변경, 나는 아마 UTF-8이 물건을 해결하는 것입니다 결정 검색 이미 (그것은 Cake의 기본 레이아웃을 통해 이미 존재했습니다). 확인했다
  • 내 브라우저에서 문서가 생각 UTF-8 (그들이)
  • 이 UTF-8로 general_ci를 MySQL의 DB에 데이터 정렬을 변경 (avalable에서 교육 자상으로 UTF-8 옵션)
  • 삭제 및 내 데이터를 다시 가져 왔습니다.

그러나 아직 붙어 있습니다. 필자는 phpMyAdmin이 레코드를 검색 할 때 HTML 소스에서 문자를 "올바르게"렌더링하는 것을 관리합니다.

나는 감지 해당 문서 인코딩의 비난 누군가에 대한 최고의 답변을 제공 할 수있는 경우, 궁금 :

  • 글리프를 보존하기 위해 MySQL로 엑셀에서 내 데이터를 이동하는 가장 좋은 방법은 무엇입니까?
  • 이 기능을 지원하기 위해 내 테이블에 가장 적합한 설정은 무엇입니까?
  • 기본적으로 é의 좋아하는 것을 표시하기 위해 UTF-8을 사용하는 것을 선호합니다. htmlentities와 같은 호출에 대한로드를 피하기 위해 Cake에서 할 수있는 일은 구성 설정이나 방법입니다. 더 친숙하게 만들고 Html->link 같은 케이크 네이티브 도우미가 작동하도록할까요? 다만 경우에

일부 코드 :

영화 컨트롤러 발췌 ..

function index() { 
     $this->set('movies' , $this->Movie->find('all')); 

} 

index.ctp보기 발췌 어떤 도움/조언에 미리

<?php foreach ($movies as $movie): ?> 
<tr> 
    <td><?php echo $movie['Movie']['id']; ?></td> 
    <td><?php echo htmlentities($movie['Movie']['title']); ?> 
    <td><?php echo $this->Html->link($movie['Movie']['title'] , 
    array('controller' => 'movies' , 'action' => 'view' , $movie['Movie']['id'])); ?> 
    </td> 

    <td><?php echo $this->Html->link("Edit", 
    array('action' => 'edit' , $movie['Movie']['id'])); ?> 
    </td> 

    <td> 
    <?php echo $this->Html->link('Delete', array('action' => 'delete', $movie['Movie']['id']), null, 'Are you sure?')?> 
    </td> 

</tr> 
<?php endforeach; ?> 

감사합니다.

답변

3

데이터를 가져 오는 동안 MySQL 연결이 UTF-8로 설정되어 있는지 확인하십시오. 데이터 정렬은 정렬 및 비교에만 사용되며 데이터 저장에는 사용되지 않습니다.

SQL 파일 시작 부분에 SET NAMES 'utf-8';을 사용하여 연결 문자 세트를 설정할 수 있습니다.

+0

감사합니다. MySQL 문자 집합과 테이블은 UTF-8로 설정됩니다. PHP MyAdmin을 통해서만 DB에 액세스 할 수 있습니다. 파일 가져 오기 설정은 UTF-8입니다. 가져 오기 파일은 SQL이 아닌 하나의 열 목록입니다. 문자는 phpMyAdmin 클라이언트에서 올바른 글리프로 표시됩니다 (예 : browse recs 및 html 소스보기). 계정 제약 조건을 고려해 볼 수있는 다른 방법은 없습니까? – trickwallett

1

자주 묻는 질문입니다.

UTF8이 작동해야합니다. 대부분의 사람들이 그 장면을 잊지 -

  1. 데이터베이스 데이터 정렬

  2. 님의 HTML 문서 인코딩 태그가

  3. 매우 중요한 UTF8로 설정 UTF8 (UTF8 빈 일반)를 사용 - : 있는지 확인하는 것이 모든 소스 파일이 utf8로 저장되었는지 확인하십시오. PC에서 메모장 + + 또는 Mac에서 Coda/TextMate/TextWrangler를 사용하여 인코딩이 올바른지 확인하십시오. 모든

    에 걸쳐 UTF8 인코딩을 사용하는 경우 당신이 그것을 필요로하지 않습니다, 그리고를 htmlentities 잊어 : 당신이 그렇게하지 않을 경우, 일부 문자 변환/재 해석은

편집을 발생할 수 있습니다

+0

Emil의 답변도 유용합니다. – Ben

+0

건배. 위의 모든 내용은 제자리에있는 것으로 보입니다 (원래 질문 참조). – trickwallett

관련 문제