News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

UTF-8 некорректное сокращение текста

Started by marsianna4ka, April 22, 2010, 08:47:52 AM

Previous topic - Next topic

marsianna4ka

Столкнулась с такой проблемой: при автоматическом сокращении теста в конце иногда появляется крокозябрик.

Например:
QuoteПоследний ответ от AltaVista
в Re: Делимся со�...
20 Апреля 2010, 20:34:06

Очевидно это связано с "разрыванием" двухбайтовых значений для русских букв в UTF-8. Что можно сделать, чтобы они сокращались корректно до целой буквы?

Использую SMF 1.1.11, т.к. 2.0 не захотела объединятся с сайтом на Drupal. Я зыковой пакет russian-utf8.

inter

меня тоже интересует сей вопрос  :)
Sorry for my English


marsianna4ka

Ну я подправила в Sources/Load.php

'substr' => create_function('$string, $start, $length = null', 'return mb_substr($string, $start, $length, "UTF-8");'),
'strlen' => create_function('$string', 'return strlen(utf8_decode($string));'),


Хак, конечно, правильее было бы переопределить эти функции где-то в файлах локализации, но искать где не было времени, вроде неплохо работает и так.

Jim_Di

Однако база конвертировалась слегка криво. у меня такая же проблема была из-за различных кодировок. в конце-концов привёл всё к UTF-8 и воспользовался средствами форума для окончательного приведения базы к UTF-8.
strange Russian programmer
jabber: [email protected]

marsianna4ka

у меня база изначально UTF-8 была и проблема не в ней

Jim_Di

У меня просто при импорте базы такая ошибка была, пока с нормальными параметрами не импортировал. Точно такое же вылезало, когда часть таблиц оказалась в latin1
strange Russian programmer
jabber: [email protected]

marsianna4ka

Я лично вообще никакие кодировки кроме юникода не признаю и стараюсь не использовать. Слишком много проблем из за этого.

При записи в базу данных строки обрезаются той же функцией substr, поэтому новые записи после её замены должны быть сокращены правильно, старые естественно останутся в том виде, в котором записались. Конечно мы говорим о разных вещах, но касательно импорта ничего определённого сказть не могу.

YO_zhik

Правильно, юникод спасёт мир и давно пора отказаться от глупых убеждений лепить в разных недокодировках. Даже в 2.0 сделали через попу.

Проблем с кодировками не наблюдал, но да, функции типа substr могут работать с мультибайтом не коректно. Лечится этим http://www.php.net/manual/de/ref.mbstring.php.

marsianna4ka

Quote from: YO_zhik on July 03, 2010, 07:31:37 PM
Проблем с кодировками не наблюдал, но да, функции типа substr могут работать с мультибайтом не коректно. Лечится этим http://www.php.net/manual/de/ref.mbstring.php.
Так я енто и предлагаю, а конкретно - функцию mb_substr. Не помню, чем не подошла mb_strlen, вместо нее пришлось использовать strlen(utf8_decode($string)).

Advertisement: