<
  • Главная
Статьи

różne kodowania php

  1. Wydawca
  2. x64 (alias andi)

początkujący autorzy skryptów nie dbają o kodowanie

początkujący autorzy skryptów nie dbają o kodowanie. Dlatego na stronach można czasem znaleźć straszny bałagan, gdy dane z bazy danych są uzyskiwane w jednym kodowaniu, strona jest tworzona w innym, a serwer otrzymuje trzeci. w rezultacie, jeśli strona może zostać odszyfrowana, to przynajmniej 2 razy. Dlaczego więc taki problem występuje i jak go pokonać?

w segmencie rosyjskim najczęściej można znaleźć tak zwane kodowanie okien. nazwij to inaczej: windows-1251, cp1251 lub nawet ansi. następny to utf-8. Możesz również znaleźć nazwę unicode, ale nie jest to całkowicie poprawne, ponieważ Unicode jest ogólną nazwą całej grupy (utf-8, utf-16, utf-32). a bardzo popularną rzadkością jest koi8-r lub po prostu koi-8 - niegdyś popularne kodowanie Linuksa. Oczywiście w rosyjskim segmencie można spotkać coś innego, ale autor to raczej „odpust”.

Główna różnica między utf-8 i innymi (przede wszystkim windows-1251 i koi8-r) to ostatni bajt, a maksymalna liczba znaków, które można przedstawić za pomocą tych kodowań, jest ograniczona do 256. Jest rzeczą oczywistą, że w celu pełnego przedstawienia tekstu tego kodowania może nie wystarczyć. a dla html znaleziono rozwiązanie - użycie tak zwanych mnemoników. na przykład:

© - & copy;

Oprócz tego, że każda taka postać jest opisywana przez grupę znaków, kod staje się nieczytelny, a praca z tekstem staje się bardziej skomplikowana. w tym miejscu ratuje wielobajtowy utf-8. bardzo wygodne jest używanie liter różnych alfabetów i różnych symboli w jednym tekście.

Zatem najwygodniejszy zestaw warunków początkowych jest następujący: kodowanie bazy danych, skryptów php i skryptów html / js powinno być takie samo. Oczywiście możesz używać różnych, ale w tym przypadku istnieje ryzyko pomylenia. nie ma znaczenia, która strona kodowa jest używana. jeśli witryna jest przeznaczona tylko dla odbiorców rosyjskojęzycznych, system Windows-1251 będzie wystarczający. w przeciwnym razie utf-8 byłby logicznym wyborem. pierwsza opcja jest mniej lub bardziej wyraźna. kodowanie wielobajtowe będzie wymagało pewnych gestów.

Podczas pracy z utf-8 standardowy notatnik notatnika nie będzie działał ! Faktem jest, że ten edytor, podczas zapisywania pliku w tym kodowaniu, dodaje podpis do początku - 3 znaki, tak zwany bom (znak kolejności bajtów), który może być użyty do określenia kodowania podczas otwierania pliku. lepiej wybrać inny edytor: notatnik2 lub notatnik ++ . w ustawieniach musisz wybrać zapisywanie bez podpisu.

Kolejnym ważnym krokiem jest praca z bazą danych. Jest wysoce pożądane, aby kodowanie pola base / table / text pasowało do kodowania skryptu (może to być cp1251 lub utf-8 lub coś innego). jeśli dane z bazy danych są uzyskiwane w formie „zyuk”, najprawdopodobniej kodowanie połączenia różni się od danych przechowywanych w bazie danych. Następujące zapytanie pomoże przezwyciężyć sytuację (wykonać natychmiast po połączeniu z bazą danych):

jeśli strona używa Windows-1251, należy ją określić - cp1251.

ogólnie rzecz biorąc, nie ma nic trudnego. tylko standardowe funkcje php nie są przeznaczone do pracy z ciągami wielobajtowymi. ale istnieją standardowe biblioteki, które pomogą poprawić sytuację: iconv i mbstring . w przypadku wyrażeń regularnych istnieje również niezbędny przełącznik, który jest aktywowany za pomocą modyfikatora u .

Cóż, dane z bazy danych są uzyskiwane, skrypty są zapisywane zgodnie ze wszystkimi regułami. Pozostaje wysłać prawidłowy tytuł i wyświetlić kod strony w przeglądarce użytkownika. wysyłamy nagłówek tak:

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

jeśli używane jest kodowanie jednobajtowe, wartość zestawu znaków będzie inna - windows-1251 . Po tym problemy nie powinny pozostać.

Najprostsze przykłady pracy z utf-8 w php:

przykład 1: iconv, liczba znaków w linii

$ s = 'string'; # ciąg w utf-8 $ cnt1 = strlen ($ s); # będzie zawierać wartość 12 $ cnt2 = iconv_strlen ($ s, 'UTF-8'); # poprawna wartość, 6

przykład 2: mbstring, liczba znaków w ciągu

$ s = 'string'; # ciąg w utf-8 $ cnt1 = strlen ($ s); # będzie zawierać wartość 12 $ cnt2 = mb_strlen ($ s, 'UTF-8'); # poprawna wartość, 6

przykład 3: wyrażenia regularne, szukaj i zamień

$ s = 'String'; # line w utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # zastąpienie nie nastąpi $ s = preg_replace ('/ p / iu', 'd', $ s); # wynik słowa dok

modyfikator i określa wyszukiwanie bez rozróżniania wielkości liter, a modyfikator u mówi silnikowi wyrażeń regularnych, aby pracował z ciągami utf-8.

jeśli ktoś powie, że php nie może działać z utf-8, będzie źle. Od kilku lat wykonuję wszystkie moje projekty w tym kodowaniu i nie było żadnych problemów. Wyszukiwarki same od dawna używają tego wspaniałego kodowania.

Wydawca

offline 11 godzin

x64 (alias andi)

Komentarze: 2846 Publikacje: 395 Rejestracja: 02-04-2009

Dlaczego więc taki problem występuje i jak go pokonać?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью