phpHypher
quittance.ru
документы
прочее

Разъяснение работы phpHypher с различными кодировками

Немно­го за­бе­гая впе­ред, необ­хо­ди­мо сде­лать два за­яв­ле­ния. Класс phpHypher кор­рект­но ра­бо­та­ет с тек­стом в ко­ди­ров­ке utf-8, а так­же с лю­бы­ми од­но­байт­ны­ми ко­до­вы­ми стра­ни­ца­ми. Класс phpHypher не по­те­ря­ет ни од­но­го сим­во­ла при пе­ре­ко­ди­ров­ке тек­ста.

Поня­тие ба­зо­вой ко­ди­ров­ки. Базо­вая ко­ди­ров­ка  это ра­бо­чая ко­до­вая стра­ни­ца, непо­сред­ствен­но ис­поль­зу­е­мая внут­ри phpHypher в про­цес­се рас­ста­нов­ки пе­ре­но­сов. Зада­ет­ся в фай­ле опи­са­ния язы­ка. С це­лью до­сти­же­ния вы­со­кой про­из­во­ди­тель­но­сти, в ка­че­стве ба­зо­вой ра­бо­чей ко­ди­ров­ки до­пус­ка­ют­ся толь­ко од­но­байт­ные (в ори­ги­наль­ном на­бо­ре для рус­ско­го язы­ка ис­поль­зу­ет­ся ко­до­вая стра­ни­ца CP1251).

Базо­вая ко­ди­ров­ка не име­ет от­но­ше­ния к ко­до­вой стра­ни­це об­ра­ба­ты­ва­е­мо­го тек­ста.

Коди­ров­ка об­ра­ба­ты­ва­е­мо­го тек­ста. Кодо­вая стра­ни­ца об­ра­ба­ты­ва­е­мо­го тек­ста мо­жет быть utf-8 или лю­бой од­но­байт­ной. Она ни­как не за­ви­сит от ба­зо­вой ко­ди­ров­ки. Зада­ет­ся вто­рым па­ра­мет­ром при вы­зо­ве ме­то­да hyphenate().

Выска­зы­ва­лись опа­се­ния, что внут­ри phpHypher пре­об­ра­зо­ва­ние об­ра­ба­ты­ва­е­мо­го тек­ста в ба­зо­вую ко­ди­ров­ку при­ве­дет к по­те­ре от­сут­ству­ю­щих в ней сим­во­лов. Спе­шим раз­ве­ять эти опа­се­ния, ни один сим­вол не бу­дет по­те­рян!

Отсут­ствие по­терь га­ран­ти­ру­ет­ся в си­лу то­го, что phpHypher ни­ко­гда не пе­ре­ко­ди­ру­ет весь текст пол­но­стью. Вме­сто это­го в ба­зо­вую ко­ди­ров­ку и об­рат­но пре­об­ра­зу­ют­ся толь­ко от­дель­ные сло­ва, вы­чле­нен­ные из тек­ста для рас­ста­нов­ки пе­ре­но­сов. Сло­ва пол­но­стью со­сто­ят из букв за­дан­но­го ал­фа­ви­та, по­это­му за­ве­до­мо не мо­гут со­дер­жать сим­во­лов, несов­ме­сти­мых с ра­бо­чей ко­до­вой стра­ни­цей.

Алго­ритм вы­чле­не­ния слов из тек­ста вы­би­ра­ет непре­рыв­ные фраг­мен­ты, со­сто­я­щие толь­ко из сим­во­лов ал­фа­ви­та опре­де­лен­но­го язы­ка, и по-от­дель­но­сти на­прав­ля­ет их на рас­ста­нов­ку пе­ре­но­сов в за­щи­щен­ный ме­тод hyphenate_word(). Таким об­ра­зом га­ран­ти­ру­ет­ся, что ме­тод hyphenate_word() ни­ко­гда не по­лу­чит сим­во­лов, от­сут­ству­ю­щих в ра­бо­чей ко­до­вой стра­ни­це, и все­гда мо­жет без­опас­но, то есть без по­терь, вы­пол­нить пре­об­ра­зо­ва­ние сло­ва в ба­зо­вую ко­ди­ров­ку и об­ратно.

Кодо­вая стра­ни­ца на­бо­ров пра­вил (сло­ва­рей). Допус­ка­ет­ся лю­бая ко­ди­ров­ка для фай­лов с на­бо­ра­ми пра­вил, при­чем каж­дый сло­варь мо­жет иметь свою соб­ствен­ную. Ника­ких огра­ни­че­ний нет. Кодо­вая стра­ни­ца сло­ва­ря обя­за­тель­но долж­на быть ука­за­на в его пер­вой зна­ча­щей строке.

Уста­нов­ки си­стем­ной ло­ка­ли. Внут­ри phpHypher не ис­поль­зу­ют­ся за­ви­си­мые от ло­ка­ли функ­ции и шаб­ло­ны ре­гу­ляр­ных вы­ра­же­ний, по­это­му ре­зуль­тат его ра­бо­ты ни­как не свя­зан с уста­нов­ка­ми ло­кали.

Вычле­не­ние слов из тек­ста и пре­об­ра­зо­ва­ния ре­ги­стра букв про­из­во­дят­ся при по­мо­щи со­от­вет­ству­ю­щих па­ра­мет­ров фай­ла опи­са­ния язы­ка, ко­то­рые со­дер­жат все сим­во­лы ал­фа­ви­та в верх­нем и ниж­нем ре­ги­стре.

Уни­каль­ный ди­зайн phpHypher обес­пе­чи­ва­ет кор­рект­ную ра­бо­ту да­же в са­мых эк­зо­ти­че­ских си­ту­а­ци­ях. Напри­мер, мо­жет ис­поль­зо­вать­ся CP1251 в ка­че­стве ба­зо­вой ко­ди­ров­ки, два фай­ла пра­вил в ко­до­вых стра­ни­цах koi8-r и ISO-8859–5, уста­нов­ле­на ки­тай­ская ло­каль, а ис­ход­ный рус­ский текст мо­жет по­да­вать­ся в ко­ди­ров­ке utf-8… И да­же в та­кой си­ту­а­ции phpHypher рас­ста­вит пе­ре­но­сы и не по­те­ря­ет ни од­но­го сим­во­ла из об­ра­ба­ты­ва­е­мо­го тек­ста.

28/01/2011
Добавить комментарий
Заполните форму, чтобы отправить свой комментарий. E-mail заполнять не обязательно, но имеет смысл, если Вы рассчитываете на ответ по почте. В любом случае, Ваш e-mail не будет опубликован.