2012-12-28 2 views
0

1) 데이터베이스에 name 열과 텍스트 비교 방법 (?) 속성이 utf8_polish_ci 인 데이터베이스에 tbl_Data 테이블이 있습니다. 내가 phpMyAdmin을 통해 tbl_Data을 탐색 할 때 매력으로 작동합니다. 내 HTML 코드에서PHP의 인코딩이 잘못 되었습니까?

2)가있어 : 나는 브라우저에 대한 적절한 인코딩 헤더를 보내는 것 같은

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="UTF-8"> 

그렇게 보인다 ... 내 PDO의 DSN이 ;charset=UTF-8을 포함

3), 다음 PHP 매뉴얼에서. 내 PHP 코드에서

4) 내가 사용 : 그들 중 일부는 잘 표시되어 있지만이 모든 것을 갖는

foreach(parent::query('SELECT ID,PLName,LatinName from tbl_Data') as $row) { 
    $result = $result." 
     <tr> 
      <td>".utf8_encode($row['PLName'])."</td> 
     </tr> 
    "; 
} 

나는 여전히 '쓰레기'(= ?) 대신에 적절한 폴란드어 문자의가 문자를 받고 있어요 (phpMyAdmin이 모두 제대로 표시됨). 여기서 내가 무엇을 놓치고 있니? 제발 조언, 동료!

내 MySQL의 엔진 InnoDB, 웹 서버입니다 : FPM과 nginx이 revelant 경우 ... 난 당신의 게시물에 대해서도 언급 할 수

+1

[utf8_encode function] (http://php.net/manual/en/function.utf8-encode.php)에 대한 PHP 설명서에 대한 의견을 보았습니까? 즉 : "텍스트가 이미 UTF-8 인 경우이 함수가 필요하지 않습니다." 'utf8_encode' 함수를 사용하지 않으면 어떻게됩니까? – Charlie

+0

이 함수를 전혀 사용하지 않으면 이전에'utf8_encode()'를 사용하여 올바른 "ó"에서 receiving을 받고 있습니다. 누락 된 문자의 나머지 부분은 여전히 ​​"?"입니다. –

+0

maby 도움이 될 것입니다. http://php.net/manual/en/function.htmlspecialchars.php – Ivo

답변

2

브라우저에 적절한 인코딩 헤더를 보내는 것처럼 보입니다.

틀린. <meta>은 HTTP 헤더가 아닌 HTML 태그가 아닌 비표준 태그입니다. 따라서 코드에는 여전히 적절한 헤더가 없습니다.

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

내 PDO의 DSN를 포함, 문자셋이 = UTF-8, PHP 매뉴얼에 따랐다.

PHP 버전이 5.3.6 미만인 경우 작동하지 않습니다. 대신 SET NAMES utf8 일반 쿼리를 사용하십시오

+0

header(), 필수 줄에 +1. – Xfile

+0

필자는'header (...)'줄을 내'ob_start();'줄 바로 뒤에 추가했으며 문자는 여전히 잘못되었습니다. 유일한 차이점은'utf8_encode()'를 사용하는지 아닌지입니다. 코드가 그것을 사용한다면, 오직 하나의 글자가'ó'로 올바르게 표시되지 않습니다. 'PHP 5.x (cli) (built : Dec 22 2012 22:12:36) 저작권 (c) 1997-2012 PHP 그룹 Zend Engine v2.4.0, 저작권 (c)) 1998-2012 Zend Technologies' –

+0

'SET NAMES utf8'이 트릭을 만들었지 만. 감사! –

0

..... 그래서 here에서 여기에 ~ _ ~
제안, 그것은 말했습니다 utf8_encode - ISO-8859-1 문자열을 UTF-8로 인코딩합니다.
그러므로 내 질문은 : 출력이 ISO-8859-1입니까?
일반 영어 테스트 레코드를 만들어 다시 시도해보십시오.

+0

조언 해 주셔서 감사합니다. 기본 설정으로 테스트 열을 추가하고 가능한 모든 폴란드 문자로 채 웁니다. phpMyAdmin은 멋지지만, 웹 사이트에서 보여줍니다 :'????? ??' –

+0

abcdefg처럼 일반 영어는 어떻습니까? –

+0

영어로 잘 작동합니다. –

1

텍스트가 이미 UTF-8로 인코딩 된 경우 utf8_encode()을 사용할 이유가 없습니다.

PHP 버전이 문제 일 수 있습니다. DSN의 ;charset=UTF-8 요소는 PHP 버전 5.3.6 이상에서만 지원됩니다. 5.3.6 이전에는 경고없이이 요소가 자동으로 무시되었습니다 (). 더 많은 정보와 이에 대한 해결 방법은 워드 프로세서에서 사용할 수 있습니다 http://php.net/manual/en/ref.pdo-mysql.connection.php

+0

php - 버전'은 나를 준다 :'PHP 5.4.10 (cli) (빌드 : 12 월 22 2012 22:12:36) PHP 그룹 Zend Engine v2.4.0, Copyright (c) 1998 -2012 젠드 테크놀러지 '그래야 작동하는 것 같습니다 ... –

1

캐릭터 세트는 UTF-8이 좋은 (당신의 HTML에) : P

이 시도 .. (에,이 새로운 실험 테이블을 사용 PHP 스크립트가 예를 들어 $ _POST 항목을 지우고 있는지 또는 전혀 아는 것이 없기 때문에 확인하십시오.PHP이 (텍스트 입력, 연마) 데이터 은닉 INSERT (or update)이있는 사람을 MySQL로 전달하기 전에)

  1. )은 PHP 통합 ((utf_ci_polish하지 않음)라는 함수

    "를 polish_title"

  2. utf8_bin 설정 항목을 작성할

    $ polish_input = htmlspecialchars ($ input_polish_data);

    INSERT INTO table_name (polish_title) values ​​('$ polish_input');

폴란드어 징후가 정상 (또는 blobed) 무엇 귀하의 의견의 일부입니다 때 (phpMyAdmin을 통해) MySQL의 테이블에서 이상한 데이터를 볼 수 있지만 귀하의 사이트에 좋은 사람 (폴란드어 출신) 당신은 MySQL의 데이터를 얻을 때 out))

이 작업을 수행하려면 모든 mqsql (텍스트) 열을 utf8_bin으로 변경해야합니다. 그리고 자신에 대한 쉬운 입력에, 당신은 mysql DB에 참여하기 전에 웹 사이트에서 $ _POST 입력을 모두 "정리"할 수있는 함수를 만들 수 있습니다.

큰 플러스는 다른 국가의 방문자가 귀하의 기본 문자 & 기호 (무엇이 중요할까요?)를 볼 수 있다는 것입니다.

편집 (상식의 사용자 입력에 들으)

그리고 그래, 노력 헤더 HTML 코드에서

header('Content-Type: text/html; charset=utf-8'); 
+0

같은 결과, 친구. 한 글자 만 올바르게 표시됩니다. –

-1

을에 또한 MUST로이 포함됩니다

<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
관련 문제