다른 PHP 인코딩

  1. 게시자
  2. x64 (일명 andi)

초보자 스크립트 작성자는 인코딩과 같은 것에 신경을 쓰지 않습니다

초보자 스크립트 작성자는 인코딩과 같은 것에 신경을 쓰지 않습니다. 따라서 사이트에서 때때로 데이터베이스의 데이터를 한 인코딩으로 얻었을 때 페이지가 다른 페이지로 구성되고 서버에 세 번째 인코딩이 제공 될 때 끔찍한 엉망이 될 수 있습니다. 결과적으로 페이지를 해독 할 수 있으면 적어도 2 번. 렇다면 왜 그런 문제가 발생하며 어떻게 극복해야합니까?

러시아어 세그먼트에서 가장 자주 당신은 소위 윈도우 인코딩을 찾을 수 있습니다. 그것을 다르게 부르십시오 : windows-1251, cp1251 또는 심지어 ansi. 다음은 utf-8입니다. 유니 코드라는 이름을 찾을 수도 있지만 유니 코드는 전체 그룹 (utf-8, utf-16, utf-32)의 일반 이름이기 때문에 완전히 정확하지는 않습니다. 매우 인기있는 희귀 성은 koi8-r 또는 간단히 koi-8입니다. 한 번 인기있는 Linux 코딩입니다. 물론, 러시아어 부문에서 뭔가 다른 것을 만날 수도 있지만, 이것은 오히려 저자가 "방종하다".

utf-8과 기타 (주로 windows-1251 및 koi8-r)의 주요 차이점은 마지막 1 바이트이며이 인코딩을 사용하여 표현할 수있는 최대 문자 수는 256 개로 제한됩니다.이 텍스트의 전체 내용을 보려면 충분하지 않을 수 있습니다. html로는 소위 니모닉을 사용하는 해결책이 발견되었습니다. 예 :

© - & copy;

이러한 각 문자가 문자 그룹으로 설명된다는 사실 외에도 코드는 읽을 수 없게되고 텍스트 작업은 더욱 복잡해집니다. 이것은 multibyte utf-8이 구출에 오는 곳입니다. 하나의 텍스트에 다른 알파벳과 다른 기호의 글자를 사용하는 것이 매우 편리합니다.

따라서, 초기 조건 중 가장 편안한 세트는 다음과 같습니다 : 데이터베이스, PHP 스크립트 및 HTML 페이지 / js 스크립트의 코딩이 동일해야합니다. 물론, 당신은 다른 것들을 사용할 수 있지만,이 경우 혼란 스러울 위험이 있습니다. 어떤 코드 페이지가 사용되는지는 중요하지 않습니다. 사이트가 러시아어를 사용하는 독자만을위한 사이트 인 경우 windows-1251로 충분합니다. 그렇지 않으면 utf-8이 논리적 인 선택이 될 것입니다. 첫 번째 옵션은 다소 명확합니다. 멀티 바이트 인코딩에는 몇 가지 제스처가 필요합니다.

utf-8로 작업 할 때 표준 메모장 메모장 이 작동하지 않습니다 ! 사실이 편집기에서이 인코딩으로 파일을 저장할 때 파일을 열 때 인코딩을 결정하는 데 사용할 수있는 bom (바이트 순서 표시)이라는 시작 문자 3 자에 서명을 추가합니다. 다른 편집기를 선택하는 것이 좋습니다. 메모장 2 또는 메모장 + + . 설정에서 서명없이 저장하도록 선택해야합니다.

다음 중요한 단계는 데이터베이스에 대한 작업입니다. base / table / text 필드의 인코딩이 스크립트 인코딩 (cp1251 또는 utf-8 또는 다른 것일 수 있음)과 일치하는 것이 좋습니다. 데이터베이스의 데이터를 "zyuk"형식으로 얻은 경우 연결 인코딩이 데이터베이스에 저장된 데이터와 다를 가능성이 큽니다. 다음 쿼리는 상황을 극복하는 데 도움이됩니다 (데이터베이스에 연결 한 직후에 실행).

사이트에서 windows-1251을 사용하는 경우 - cp1251을 지정해야합니다.

일반적으로 어려운 것은 없습니다. 표준 PHP 함수는 멀티 바이트 문자열과 함께 작동하도록 설계되지 않았습니다. 상황을 해결하는 데 도움이되는 표준 라이브러리가 있습니다. iconv mbstring . 정규 표현식의 경우에는 수식어 u로 활성화되는 필수 스위치가 있습니다.

글쎄, 데이터베이스에서 데이터를 얻은 스크립트는 모든 규칙에 따라 작성됩니다. 올바른 제목을 보내고 사용자의 브라우저에 페이지 코드를 표시해야합니다. 우리는 제목을 보냅니다.

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

싱글 바이트 인코딩을 사용하면 charset 값이 달라집니다 ( windows-1251) . 그 후에 문제가 남아서는 안됩니다.

PHP에서 utf-8로 작업하는 간단한 예제들 :

예 1 : iconv, 줄당 문자 수

$ s = '문자열'; # string in utf-8 $ cnt1 = strlen ($ s); #에는 $ 12 값이 포함됩니다. cnt2 = iconv_strlen ($ s, 'UTF-8'); # 올바른 값, 6

예제 2 : 문자열의 문자 수인 mbstring

$ s = '문자열'; # string in utf-8 $ cnt1 = strlen ($ s); # 값 $ 12를 포함합니다 cnt2 = mb_strlen ($ s, 'UTF-8'); # 올바른 값, 6

예제 3 : 정규식, 검색 및 바꾸기

$ s = '문자열'; # 줄에 utf-8 $ s = preg_replace ( '/ p / i', 'd', $ s); # 교체는 일어나지 않습니다. $ s = preg_replace ( '/ p / iu', 'd', $ s); # 결과 단어 독

i 수정자는 대소 문자를 구분하지 않고 검색을 지정하고 u 수정자는 정규 표현식 엔진에 utf-8 문자열로 작업하도록 지시합니다.

누군가가 php가 utf-8에서 작동하지 않는다고 말하면 잘못된 것입니다. 몇 년 동안 지금 나는이 인코딩으로 모든 프로젝트를 수행해 왔으며 전혀 문제가 없었습니다. 검색 엔진 자체는 오랫동안이 멋진 인코딩을 사용 해왔다.

게시자

오프라인 11 시간

x64 (일명 andi)

의견 : 2846 간행물 : 395 등록 : 02-04-2009

?렇다면 왜 그런 문제가 발생하며 어떻게 극복해야합니까?