Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[РЕШЕНО] абракадабра вместо буквы (вопросик в ромбике)...


Recommended Posts

Надіслати
Поділитися на інших сайтах

Ее естественно смотрел, НО у меня в коде даже нет строчки:
'description' => substr(strip_tags(html_entity_decode($result['description'],ENT_QUOTES, 'UTF-8')), 0, 100) . '..',

которую надо заменить на:

'description' => $description[0] . '..',
Надіслати
Поділитися на інших сайтах


Попробуй вместо "100" сделать "160".

Мне помогло.

Это просто совпадение.

Суть проблемы в том функция substr не может корректно работать с многобайтными кодировками, к которым относится UTF-8, и режет не 100 символов а 100 байт.

Если объяснять на пальцах то в UTF-8 для латинских символов, знаков препинания и цифр используется 1 байт, а для наборов символов национальных кодировок, например кириллицы, используется 2 байта. Получается если в строке сотый символ однобайтный, то всё режется корректно, а если там где надо резать находится двухбайтный символ который занимает сотый и сто первый быйты, то при обрезании символ разрывается на две части. Вот этот огрызок символа и приводит к тому что появляются ромбики и прочая хрень. Человеку у которого жизнь наладилась при замене 100 на 160 просто повезло. 160-ый байт оказался однобайтным символом. И абсолютно не факт что так повезёт во всех строках.

По ссылке которую дал costas описывается как сделать что-бы строка всегда резалась по однобайтному символу.

Только используя этот метод надо учитывать что он режет не 160 символов, а примерно 160 байт и реальное количество символов в отрезанной строке зависит не только от слова в районе которого режется строка, а и от того сколько в строке однобайтных и двухбайтных символов. Грубо говоря если текст полностью на русском языке то длина строки будет чуть больше 80 символов. Это "чуть больше" обусловленно наличием в тексте пробелов, цифр, запятых, точек и других однобайтных символов.

Используйте решение предложенное costas'ом, пока не будет принято решение как будем затыкать эту проблему.

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

Суть метода:

Надо включить оверлоад строковых функций и указать внутреннюю кодировку символов по умолчанию

Если на сервере используется PHP версии ниже 5.2.8, то это можно сделать в .htaccess такими строками

php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8
К сожалению это решение не идеально и при стечении некоторых обстоятельств могут наблюдаться глюки.

Этой проблеме уже много лет и она до сих пор не решена, поэтому начиная с PHP 5.2.8 разработчики просто отключили возможность управления оверлоадом в .htaccess и тут прийдётся включать оверлоад в php.ini

Одним словом надо разбираться с каждым серваком отдельно и подбирать рабочее решение..

Существует только одно решение которое на 100% будет корректно работать у всех - подключать библиотеку для работы с UTF-8 и перелопачивать под неё весь код где нужны многобайтные функции.

Будет ли это сделано и в какие сроки - я не знаю.

Надіслати
Поділитися на інших сайтах

вместо букв вылезает абракадабра, что с этим можно сделать? версия 1.5.1.1.

Попробуй http://rb.labtodo.com/page/izmenjaem-dlinu-opisanij-tovarov-v-kataloge-opencart-1505

В этом месте 1.5.1.1 не отличается от 1.5.0.5

Надіслати
Поділитися на інших сайтах


  • 3 weeks later...

Если на сервере используется PHP версии ниже 5.2.8, то это можно сделать в .htaccess такими строками

php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8

У меня версия PHP: 5.3.3, так что этот способ не катит.

Если вносить правку в php.ini, то это ведь затронет остальные сайты на сервере, а там есть сайты с кодировкой windows-1251

Как быть?

Надіслати
Поділитися на інших сайтах


  • 4 weeks later...

У меня версия PHP: 5.3.3, так что этот способ не катит.

Если вносить правку в php.ini, то это ведь затронет остальные сайты на сервере, а там есть сайты с кодировкой windows-1251

Как быть?

У Вас на сервере PHP установлен как обработчик CGI (suPHP)? Если да то Вы можете вносить эти изменения в файл php.ini в корне сайта.

Надіслати
Поділитися на інших сайтах


  • 2 years later...

У меня проблема такая в выводе категорий:

0ec2dc0975fb0c463353db56fa575f96.jpeg

Никто не знает как решить?

Надіслати
Поділитися на інших сайтах


  • 3 weeks later...

У меня тоже ромбики, правда не в меню, а в категориях в названиях товаров. Стоят они в конце, а не в начале.

Где копать? все перегуглил - не понятно.

Система ocstore 1.5.4.1 шаб, если это от него зависит metroshop, хостинг reg ru, там есть разные версии PHP, все перепробовал - все равно ромбики... и в php.ini прописывал, и в htaccess (((

Надіслати
Поділитися на інших сайтах


  • 1 month later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.