2013-04-24 2 views
0

스택을 처리되지 않습니다 :® 문자는 내 양식에 올바르게

5.3 => 가 저장 PHP에 의해 => 처리 유닉스에서 실행중인 아파치 웹 서버에 게시 된 텍스트 필드 => 와 간단한 양식 latin1 문자 세트를 가진 mysql5 테이블

보다, DB로부터 검색되어 사용자에게 보여진다.

결과 : 사용자가 양식에 ® 기호를 입력 할 때,이 두 심볼 대신 중 하나와 DB에 저장 한 다음 방법으로는 ZPL 프린터

잘못 표시되는 것,이 때 발생하지 않습니다 Unix가 아닌 Windows를 실행하는 개발 컴퓨터에서 실행됩니다.

내가 뭘 잘못하고 있니?

편집 : MySQL의 테이블의 문자 집합을 변경할 수 없습니다, 거기에 내가 감사하지 않는 라틴에 대한 회사의 표준입니다하지만 당신은 utf8_general_ci와 mysql5 테이블을 시도해야 여전히 경우

답변

1

문자 인코딩 시나리오에서 여러 장소에서 규칙을 재생 인코딩 서버에 매개 변수를 보내는 클라이언트를 사용하지

  • 인코딩 문자를 intepret하는 MySQL 서버 사용을하지
  • 은 서버에 PHP 스크립트에서 보내는 인코딩이 PHP 스크립트에 결과를 다시 보낼 수있는 MySQL 서버 사용을하지
  • 인코딩을 저장하기 위해 MySQL 서버 사용을하지

  • 이 설정 :

는이 UTF-8 인코딩에서 전체 체인을 유지하는 가장 간단한의 인코딩 데이터가 클라이언트로 PHP 스크립트에서 보내는 렌더링 할 수있는 클라이언트/브라우저를 사용하지

  • /브라우저 데이터 th에 보내는 html 문서의 문자 인코딩 e 브라우저에서 utf-8로. default_charset을 통해
    mysql 서버에 연결 문자셋이 utf-8임을 나타냅니다. PDO-MYSQL DSN에 charset 속성을 설정합니다.
    utf-8을 기본 charset으로 사용하고 필드 자체에 대한 다른 인코딩을 지정하지 않고 테이블을 만듭니다.

    자체 포함 된 예 :

    <?php 
    ini_set('default_charset', 'utf-8'); 
    $fn = isset($_POST['val']) ? 'doDatabase' : 'doForm'; 
    doHtml($fn); 
    
    
    function doHtml($fn) { ?> 
    <html> 
        <head><title>...</title></head> 
        <body> 
         <?php $fn(); ?> 
        </body> 
    </html> 
    <?php 
    } 
    
    function doForm() { ?> 
        <form method="POST" action="?"> 
         <div> 
          <input type="text" name="val" value="&reg;" /> 
          <input type="submit" /> 
         </div> 
        </form> 
    <?php  
    } 
    
    function doDatabase() { 
        $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); 
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    
        $pdo->exec(' 
         CREATE TEMPORARY TABLE soFoo (
          id int auto_increment, 
          val varchar(30), 
          primary key(id) 
         ) DEFAULT CHARACTER SET utf8 
        '); 
    
        $stmt = $pdo->prepare('INSERT INTO soFoo (val) VALUES (?)'); 
        $stmt->execute(array($_POST['val'])); 
        $stmt = null; 
    
        foreach($pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row) { 
         echo 'row: ', join(', ', $row), "<br />\r\n"; 
        } 
    } 
    
    +0

    신난다, 나는이 종류의 대답을 바랐다. 자, 당신은 문자 집합을 건너 뛰지 않았습니까? php 2. os? (당신은 코드 샘플에 PHP가 포함되어 있지만 설명에는 없습니다. – shealtiel

    +0

    불행히도 내 결정이 아닌 테이블의 문자 집합을 변경할 수 있을지는 의문입니다. – shealtiel

    +0

    그리고 나는 언젠가 모든 성격의 주제를 이해하고 싶습니다. 내가 사용하는 모든 소프트웨어 스택에 걸쳐 설정합니다. 독서를 권할 수 있습니까? – shealtiel

    0

    입니다 정렬

    +0

    감사합니다, 그 이유는 무엇입니까? shealtiel – shealtiel

    +0

    utf8에는 필요한 모든 것이 포함되어 있으며 웹 페이지의 99 %가 사용됩니다 (예 : ) 예를 들어, 페이지가 UTF8과 latin_ *에서 데이터베이스를 사용하는 경우 echo utf8_encode 들); 언제든지. – Shu