27.10.2008
|
Для обрезания длинных строк в данном продукте используется функция [b]substr()[/b], которая не умеет корректно работать с UTF-8 строками. В итоге получается:
во-первых - в конце обрезанной строки символ '?' (пример на картинке);
[img size=243]http://www.vtiger.ru/components/com_joomlaboard/uploaded/images/substr081027.jpg[/img]
во-вторых - если такое подрезание происходит в определённых полях, то в некоторых случаях, не удаётся выбрать данную запись в формах создания события или задачи.
Для решения данной проблемы можно использовать функцию [b]mb_substr()[/b], которая как раз корректно работает с кодировкой UTF-8.
Для этого необходимо поставить соответствующее расширение для PHP - [b]mbstring[/b]. И в файле конфигурации PHP [b]php.ini[/b] добавляем:
[code:1]...
extension=php_mbstring.dll
...
[mbstring]
mbstring.language = Neutral
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = UTF-8
...
[/code:1]
Далее можно править файлы, заменяя функцию substr() на mb_substr()
Данный пример [b]для версии 5.0.4[/b]
1. Исправление для списков контактов
Ищем строку в конце файла "/include/utils/[b]ListViewUtils.php[/b]", функция textlength_check()
[code:1]$temp_val = substr(preg_replace("/(</?)(w+)([^>]*>«»)/i","",$field_val),0,$listview_max_textlength).'...';[/code:1]
и меняем в ней функцию substr() на mb_substr(), получается
[code:1]$temp_val = mb_substr(preg_replace("/(</?)(w+)([^>]*>«»)/i","",$field_val),0,$listview_max_textlength).'...';
[/code:1]
2. Исправление для календаря
файл "/modules/Calendar/[b]calendarLayout.php[/b]", функция getEventLis(), строка
[code:1]$subject = substr($subject,0,$listview_max_textlength)."...";[/code:1]
также меняем на mb_substr
Сообщение отредактировано: alex_olt, в: 2008/10/27 09:00
Сообщение отредактировано: alex_olt, в: 2008/10/27 09:01
|
28.10.2008
|
В процессе выяснилось, что для корректной работы функции сокращения длиных строк (в части определения длины строки) необходимо вместе с заменой функции [b]substr()[/b] менять и функцию [b]strlen()[/b] на [b]mb_strlen()[/b], которая находится выше, в проверке условия.
|