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

В конце описания товара при его удиллении появляются иероглифы только русский


Recommended Posts

99% причина такая: в контроллере обрезка текста не справляется с русским языком из-за кодировки. Нужно подправить способ обрезки.

Покажите содержание контроллера?

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


99% причина такая: в контроллере обрезка текста не справляется с русским языком из-за кодировки. Нужно подправить способ обрезки.

Покажите содержание контроллера?

Доюрый день!

я столкнулся с такой же проблемой, буду рад помощи. Содержимое контроллера следующее

$this->data['products'][] = array(
	'product_id'  => $result['product_id'],
	'thumb'       => $image,
	'sku'		  => $result['sku'],
	'quantity'	  => $result['quantity'],
	'weight'	  => $result['weight'],	
	'stock_status'     => $result['stock_status'],
	'name'        => $result['name'],
	'description' => substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 500) . '..',
	'price'       => $price,
	'model'       => $result['model'],
	'special'     => $special,
	'tax'         => $tax,
	'rating'      => $result['rating'],
	'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
	'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])
);
Надіслати
Поділитися на інших сайтах


Описание этой проблемы и как справиться с ней написано тут

Цитирую

проблема в том что в кодировке UTF8 символы кириллицы кодируются двумя байтами в отличии от ASCII ,где символ представлен одним байтом.

Функции же substr работает не с символами строки, а с байтами , поэтому в конце строки у тебя выходит такое чудо.

Лечится просто-вместо

substr()
ставить

mb_substr()
и все будет в поряде
Надіслати
Поділитися на інших сайтах

'name'        => $result['name'],
	'description' => substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 500) . '..',
	'price'       => $price,
);
В соседней теме написано, что речь про 1.5.1.3

Приведенный код - не из 1.5.1.3. Там уже давно совсем другое написано. Так что не заблуждайтесь насчёт своей версии.

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


В соседней теме написано, что речь про 1.5.1.3

Приведенный код - не из 1.5.1.3. Там уже давно совсем другое написано. Так что не заблуждайтесь насчёт своей версии.

так вот я и не понял что делать в 1.5.1.3 у меня все вроде другое...

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


так вот я и не понял что делать в 1.5.1.3 у меня все вроде другое...

Если там что-то вроде этого:

'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',

и ошибка есть, дайте пару текстов (с картинки), которые режутся, и скажите точную цифру, по которой обрезается (в оригинале 100, но может менялась?).

Если воспроизводится на последней версии - надо описать баг, пусть разбираются со своей заменой mbstring.

Если надо, чтобы быстро полегчало, пока вопрос решается - замените utf8_substr на mb_substr. У русских хостеров с этим обычно проблем нет. Если вдруг будут - см. гугл, "opencart mbstring", там есть ссылки и на этот форум с подробным описанием проблем и решений от Yesvik. Но это скорей всего не понадобится.

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


Если там что-то вроде этого:

'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',

и ошибка есть, дайте пару текстов (с картинки), которые режутся, и скажите точную цифру, по которой обрезается (в оригинале 100, но может менялась?).

Если воспроизводится на последней версии - надо описать баг, пусть разбираются со своей заменой mbstring.

Если надо, чтобы быстро полегчало, пока вопрос решается - замените utf8_substr на mb_substr. У русских хостеров с этим обычно проблем нет. Если вдруг будут - см. гугл, "opencart mbstring", там есть ссылки и на этот форум с подробным описанием проблем и решений от Yesvik. Но это скорей всего не понадобится.

где там? в каком файле??

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


нашел где во тчто у меня:

$this->data['products'][] = array(

'product_id' => $result['product_id'],

'thumb' => $image,

'name' => $result['name'],

'description' => mb_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400) . '..',

'price' => $price,

'special' => $special,

'tax' => $tax,

'rating' => $result['rating'],

'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),

'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])

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


нашел где вот что у меня:

'description' => mb_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400) . '..',
И это не 1.5.1.3. Больше похоже на мои правки http://rb.labtodo.com/page/izmenjaem-dlinu-opisanij-tovarov-v-kataloge-opencart-1505 (из-за mb_substr и 400), но неаккуратно сделанные. Хотя, конечно, цифра 400 не только мне могла показаться более привлекательной :)

Надо:

'description' => mb_substr( strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400, 'UTF-8') . '...',
Надіслати
Поділитися на інших сайтах


Решилось с точностью наоборот - поменял: mb_substr на utf8_substr и все заработало нормально!

OMG. Час от часу не легче. Значит таки 1.5.1.3, но у которой ковырялись в потрохах.
Надіслати
Поділитися на інших сайтах


И это не 1.5.1.3. Больше похоже на мои правки http://rb.labtodo.com/page/izmenjaem-dlinu-opisanij-tovarov-v-kataloge-opencart-1505 (из-за mb_substr и 400), но неаккуратно сделанные. Хотя, конечно, цифра 400 не только мне могла показаться более привлекательной :)

Надо:

'description' => mb_substr( strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400, 'UTF-8') . '...',

400 задал я сам лично...

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


К стати вариант:

'description' => mb_substr( strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400, 'UTF-8') . '...',

Тоже работает... уж не знаю чем он лучше и лучше ли чем то что попробовал я :) т.е.:

'description' => utf-8_substr( strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400) . '...',

а ни кто не пробовал выровнять по ширине т.е. чтобы от края до каря было ровно, а не рвано как сейчас, и чтобы не разрывало вконце слова...

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


к стати уж в тему, а ни кто не выравнивал превью описание в категории по ширине? чтобы было не рванное а ровненькое?

Это некрасиво, неудобно читаемо, и, вообще, практически дурной тон в сайтах. Было модно в начале 2000-х.

и чтобы не разрывало вконце слова

А вот, чтобы не разрывало слова - это правильно и по-человечески. Попробуйте вот эту вашу строку с "'description' => " заменить на:

'description' => substr(utf-8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400), 0, strrpos(utf-8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400), ' ' )) . '...',

проверять было облом, надеюсь, что не ошибся.

p.s. код не совсем корректный, если заработает, то можно оптимизировать ))

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


Это некрасиво, неудобно читаемо, и, вообще, практически дурной тон в сайтах. Было модно в начале 2000-х.

А вот, чтобы не разрывало слова - это правильно и по-человечески. Попробуйте вот эту вашу строку с "'description' => " заменить на:

'description' => substr(utf-8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400), 0, strrpos(utf-8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 400), ' ' )) . '...',

проверять было облом, надеюсь, что не ошибся.

p.s. код не совсем корректный, если заработает, то можно оптимизировать ))

Не не работает что-то а то что насчет форматирования имел ввиду вот примерно так как на аттачменте.

post-4711-0-42166800-1320171604_thumb.png

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


насчет форматирования имел ввиду вот примерно так как на аттачменте.

я понял, но лучше не по сторонам выровнять, а ограничить в css справа, чтобы текст за условную линию не заходил.

Насчет обрезки слов - ок, тогда сам проверю, подрихтую и напишу изменения.

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


я понял, но лучше не по сторонам выровнять, а ограничить в css справа, чтобы текст за условную линию не заходил.

Насчет обрезки слов - ок, тогда сам проверю, подрихтую и напишу изменения.

Спасибо большое! А CSS справа ограничить не подскажите как?

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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