2011-11-16 3 views
5

을 캐릭터 세트 그러나 나는 내가 CI 포럼에 주위 부탁 해요 .. 일부 문자 집합 문제를했습니다,하지만 난 여전히 글로벌 솔루션 더 갈하려는 : http://codeigniter.com/forums/viewthread/204409/CodeIgniter는 내가하지 오랫동안 CodeIgniter를 사용하고

문제는 데이터베이스 오류 1064입니다. 해결책이 있는데 iconv를 사용하십시오! 잘 작동하지만 필요 없다고 생각합니다. 저는 인터넷에서 charset 등을 많이 찾고 있습니다.하지만 지금은 CI를 사용하고 있습니다. 문자셋과 CI는 어떻습니까?

그래서 많은 질문을했습니다. 나를 위해 :

글로벌 charset을 설정하는 가장 좋은 방법은 무엇입니까? 그리고 무엇을 설정할 것인가? 구성에서

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  • 머리

    • /config.php를

      구성에서 $config['charset'] = 'UTF-8';

    • /database.php

      $db['default']['char_set'] = 'utf8';

      의 .htaccess에서

      $db['default']['dbcollat'] = 'utf8_general_ci';

    • , 내 재 작성 규칙과

      php_value magic_quotes_gpc Off

      AddDefaultCharset UTF-8

    • 는 또한 헤더를 보낼 필요가? 장소는 어디입니까? 뭔가? 내 편집기 (메모장 ++) UTF-8로 파일을 저장에서

      header('Content-Type: text/html; charset=UTF-8');

    • ? 또는 UTF-8 (BOM 없음)? 아니면 ANSI가 좋은가요? (지금 제가 사용하고있는 것입니다)?

    • MySQL 데이터베이스에 utf8_unicode_ci 또는 utf8_general_ci를 사용 하시겠습니까? 그리고 왜?

    • RSS 피드를 읽는 방법, 여러 문자 집합을 처리하는 방법은 무엇입니까? 내가 작업하고있는 곳에서는 UTF-8 인코딩과 ISO-8859-1의 두 가지 피드가 있습니다. 이것은 데이터베이스에 저장되며 때로는 새로운 항목이 있는지 비교하기 위해 비교됩니다. 특수 문자에서는 실패합니다.

    내가 함께 일하고 있어요 : - CI 2.0.3 - PHP 5.2.17 - MySQL은 5.1.58

    자세한 내용은 추가 :

    모델 :

    function update_favorite($data) 
    { 
    $this->db->where('id', $data['id']); 
    $this->db->where('user_id', $data['user_id']); 
    $this->db->update('favorites', $data); 
    return; 
    } 
    

    컨트롤러 : 따옴표없이 "테스트"(: $ rss_last 같은 "정상적인"값입니다

    $this->favorites_model->update_favorite(array(
    'id' => $id, 
    'rss_last' => $rss_last, 
    'user_id' => $this->session->userdata('user_id') 
    )); 
    

    ) 잘 작동합니다. 는 (네덜란드어에서) 같은 더 길이의 값의 경우 :

    는 CI 포럼에서

    Error Number: 1064

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘vindt malware met certificaat van Maleisische overheid, user_id = ‘1’ WHERE `i’ at line 1

    UPDATE favorites SET id = ‘15’, rss_last = F-Secure vindt malware met certificaat van Maleisische overheid, user_id = ‘1’ WHERE id = ‘15’ AND user_id = ‘1’

    Filename: /home/.../domains/....nl/public_html/new/models/favorites_model.php

    Line Number: 35

    누군가가 이것을 사용하라고 : 반 Maleisische이

    을 overheid certificaat F 시큐어 vindt 악성 코드 나는이 오류가 만났다 : BEF에게로

    'rss_last' => iconv("UTF-8", "UTF-8//TRANSLIT", $rss_last) 
    

    이 잘 작동하지만 난이 필요하지 않습니다 생각은 ..

    값 $의 rss_last는 RSS 피드를 나왔다 광석, 때로는 UTF-8 및 기타 회 ISO-8859-1 인코딩 :

    : $ rss_last이 값으로 설정 될 때이 마지막 부분은 문제가있는 것처럼

    $rss = file_get_contents('http://www.website.com/rss.xml'); 
    $feed = new SimpleXmlElement($rss); 
    $rss_last = $feed->channel->item[0]->title; 
    

    그것은 잘 작동 보인다

    $rss_last = 'F-Secure vindt malware met certificaat van Maleisische overheid'; 
    
    는 값이 ..이 문제를주는 RSS ...

    좀 더 질문이 나왔을 때

    그냥 이걸 발견 : Detect encoding and make everything UTF-8

    최상의 솔루션?

    $encoding = some_function_to_get_encoding_from_feed($feed); 
    $rss_last = iconv($encoding, "UTF-8//TRANSLIT", $feed->channel->item[0]->title); 
    

    그러나 "some_function_to_get_encoding_from_feed"무엇을 사용하는 :하지만 ... iconv에서 더 간단이 그런 짓을하지? mb_detect_encoding?

    mb_convert_encoding vs iconv?

  • +0

    추가 : SQL Update 함수에서 _rss_last_를 제외한 모든 매개 변수가 따옴표로 묶입니다. 예, 저는 그것이 CI에 의해 생성 된 것을 알고 있지만 이것은 의심 스럽습니다. –

    +0

    _ 괜찮습니다.하지만 이것이 필요하지 않다고 생각합니다 ._ 당신의 권리입니다. –

    답변

    4

    1) 글로벌 솔루션이 없습니다.

    2)

    AddDefaultCharset UTF-8 
    

    그것은 바로 인코딩으로 클라이언트에 아파치 응답을 필요로합니다. 그것을 만드십시오.

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    

    반드시 그렇지는 않지만 W3C에서 권장합니다.

    $config['charset'] = 'UTF-8'; 
    

    가 데이터베이스에 CI 연결을위한 바람직한

    $db['default']['char_set'] = 'utf8'; 
    $db['default']['dbcollat'] = 'utf8_general_ci'; 
    

    인코딩입니다. 데이터베이스 인코딩이 UTF-8 인 경우 필수로 설정하십시오.

    header('Content-Type: text/html; charset=UTF-8'); 
    

    필요하지 않으면이 작업을 수행하지 마십시오. Charset은 이미 HTML 코드와 .htaccess로 표시됩니다.

    Use utf8_unicode_ci or utf8_general_ci for the MySQL database? And why? 
    

    자신의 언어는 러시아어로 utf8_general_ci를 사용합니다.

    In my editor (Notepad++) save files as UTF-8? 
    

    물론입니다! Apache가 UTF8로 제공하는 모든 코드는 UTF8이어야합니다.

    How about reading RSS feeds, how to handle multiple charsets? 
    

    각 테이블에 각 RSS가있는 경우 각 테이블에 대해 charset을 지정하고 각 sql 쿼리로 올바른 인코딩을 설정할 수 있습니다. 예를 들어, 키릴 기호가 UTF8이 아닌 경우에는 실패합니다.

    +0

    필자는 HTML과 $ db [ 'default'] [ 'dbcollat'] = 'utf8_general_ci'에 대해 UTF-8로 저장되는 .htaccess와 모든 HTML 파일의 인코딩을 의무 사항이라고 추가했습니다. MYSQL 용. –

    +0

    답장을 보내 주셔서 감사합니다! 처음 게시물에서 RSS 피드를 읽는 것에 대한 정보를 추가했습니다. – Roy

    1

    UTF-8 (BOM 제외)은 구성에 따라 최상의 결과를 제공해야하며 인코딩이 헤드 부분에서 이미 선택되어 있으므로 별도의 헤더를 보낼 필요가 없습니다. Utf8_general_ci는 MySQL 데이터베이스에 대해 잘 수행해야합니다. 아마도 데이터베이스의 항목이 유효하지 않습니까?

    +0

    확인 및 변경되었지만 차이는 없습니다. 여전히 쿼리에 사용하기 전에 iconv ("UTF-8", "UTF-8 // TRANSLIT", $ value)'를 넣어야합니다. 1064 데이터베이스 오류가 발생했습니다 ... 데이터베이스의 항목이 올바르지 않습니다. ? 모든 데이터 정렬은 utf8_general_ci .. – Roy

    +0

    1) 전체 데이터베이스 오류를 알려주시겠습니까? 2) 나는 삽입되었을 때 엔트리가 UTF-8이 아닐 수도 있음을 의미했다. 3) 아마도 PHP를 5.3.x로 업데이트해야합니다. 몇 주 전에 친구가 CI2와 PHP의 이전 버전을 사용하여 db와 약간의 문제가있었습니다. 그가 시도한 일은 없었습니다 ... 그리고 그는 PHP를 업데이트했고 모든 것이 갑자기 좋았습니다 ... 이상한 버그. 하지만 이것이 최후의 수단이되어야합니다. – Shomz

    +0

    추가 정보를 추가하기 만하면 호스팅 제공 업체에 업그레이드를 요청할 것입니다. – Roy

    관련 문제