Автор Тема: Поддержка кавычек в наименованиях и заголовках  (Прочитано 13590 раз)

zaidim

  • Гость
Есть такая проблема, что при правке товара, категории и т.п. в наименованиях и в заголовках из-за отсутствия поддержки двойных кавычек обрезаются строки... т.е. наименование Комплект изделий "Лебединая песня" (версия 3.0) обрезается до Комплект изделий . Таким образом при сохранении теряется часть наименований.

В принципе во многом аналогично себя ведут и мета-тэги keywords и т.п., но там это в любом случае "дурной тон" и с обрезкой согласиться можно. А вот в заголовках и т.п. такое поведение мешает. Лечится просто:

Для правки товаров достаточно поправить админский шаблон catalog_products_edit.tpl.html, а именно заменить конструкции вида:
{$product_edit[20]} на {$product_edit[20]|escape} (добавляется smarty-функция escape).

sadko

  • Гость
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #1 : Августа 12, 2011, 08:47:02 am »
Не совсем понял, где у вас проблемы с кавычками. Я заметил, что если при создании нового товара дать ему название с двойными кавычками - неверно формируется, вернее - вообще не формируется URL! Но если сначала сохранить без кавычек - все ОК. Потом кавычки можно добавлять.

zaidim

  • Гость
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #2 : Августа 12, 2011, 10:16:29 am »
работать не будет при кодироке движкак cp1251 надо в admin.php перед
Возможно... уже несколько лет не делал ничего на cp1251 :)

sadko

  • Гость
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #3 : Августа 12, 2011, 01:11:27 pm »
как это урл не формируется?
я исползую кавычки-елочки: «»

Комплект «Типограф»
URL: -128/



Но если сначала сохранить без кавычек, формируется верно. Кавычки могно добавит потом. Вообще, по мнению Лебедева, использовать кавычки-лапки - зло! К тому же при этом не усекается имя товара.

Оффлайн mask

  • Пользователь
  • **
  • Сообщений: 81
  • --- любые модули под заказ ---
    • Просмотр профиля
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #4 : Августа 20, 2011, 03:03:09 pm »
Сереже на заметку:  ;)

function TriminSendPost( $str )
{
return trim( delManySpace( TransformStringToDataBase( $str )));
}
function delManySpace( $str )
{
return preg_replace('| +|', ' ', $str);
}
function TransformStringToDataBase( $str )
{
if (is_array($str) )
{
foreach ($str as $key => $val)
{
$str[$key] = stripslashes($val);
}
$str = str_replace("\\","\\\\",$str);
}
else
{
$str = str_replace("\\","\\\\", stripslashes($str) );
}

return str_replace( "'", "''", $str );
}
function TransformDataBaseStringToText( $str )
{

$symbol = array ( '`' => '', '&' => '&', '-' => '–', '"' => '"', '\'' => ''' );
foreach ($symbol as $n => $s)
{
$str = str_replace($n, $s, $str);
}

$str = preg_replace("/(?:\«([^\«\»]+)\»)/", "«\\1»", $str);

return stripcslashes( $str );
}

Использование:

     $sampost = TriminSendPost( $_POST["sampost"] );

При выборке из БД:

     while ( бла-бла )
     {
           $row[1] = TransformDataBaseStringToText(  $row[1] );
     }

Проблем уйдет много, само собой  :)

Поясню:

TriminSendPost - обрезает пробелы в начале и конце строки, а также двойны пробелы, вида "мир  мир" на "мир мир"
delManySpace  - убирает большие расстояния между словами.
TransformStringToDataBase - Екранирует символы для отправки в БД (защита MySql).
TransformDataBaseStringToText - преобразовует html-сущности для шаблона. (например "Слово" => «Слово» => в исходном коде html «Слово»)
« Последнее редактирование: Марта 27, 2012, 02:30:39 pm от mask »
=====================
Хостинг: http://www.ukraine.com.ua/?page=13754
Тётя А$я: 6восем4-3пять1-6сем4 (без ссылок) =)
Skype: seoromin

Оффлайн alpha33

  • Пользователь
  • **
  • Сообщений: 33
    • Просмотр профиля
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #5 : Сентября 06, 2011, 09:08:27 pm »
как это урл не формируется?
http://lego-demo.shop-script.org/admin.php?dpt=catalog&sub=products_edit&productID=128 нормально урл сформировался
напримере данного товара можно увидеть про какую проблему писал старт топик
Натурально, не формируется. Я с этим столкнулся, уже понял. Если поставить название товара со словом в кавычках, то ЧПУ не формируется. Стоит убрать эти знаки и перегрузить - всё работает.

Хедин

  • Гость
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #6 : Октября 03, 2011, 09:52:40 am »
Сереже на заметку:  ;)

function TriminSendPost( $str )
{
$str = delManySpace( $str );
$str = trim( TransformStringToDataBase( $str ));
return $str;
}
function delManySpace( $str )
{
$str = preg_replace('| +|', ' ', $str);
return $str;
}
function TransformStringToDataBase( $str )
{
if (is_array($str) )
{
foreach ($str as $key => $val)
{
$str[$key] = stripslashes($val);
}
$str = str_replace("\\","\\\\",$str);
}
else
{
$str = str_replace("\\","\\\\", stripslashes($str) );
}

return str_replace( "'", "''", $str );
}
function TransformDataBaseStringToText( $str )
{

$symbol = array ( '`' => '', '&' => '&', '-' => '–', '"' => '"', '\'' => ''' );
foreach ($symbol as $n => $s)
{
$str = str_replace($n, $s, $str);
}

$str = preg_replace("/(?:\«([^\«\»]+)\»)/", "«\\1»", $str);

return stripcslashes( $str );
}

Использование:

     $sampost = TriminSendPost( $_POST["sampost"] );

При выборке из БД:

     while ( бла-бла )
     {
           $row[1] = TransformDataBaseStringToText(  $row[1] );
     }

Проблем уйдет много, само собой  :)

Поясню:

TriminSendPost - обрезает пробелы в начале и конце строки.
delManySpace  - убирает большие расстояния между словами.
TransformStringToDataBase - Екранирует символы для отправки в БД (защита MySql).
TransformDataBaseStringToText - преобразовует html-сущности для шаблона. (например "Слово" => «Слово» => в исходном коде html «Слово»)


Кто может пояснить куда это все вставлять?

Хедин

  • Гость
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #7 : Октября 05, 2011, 11:00:18 am »
Никто не подскажет?

sadko

  • Гость
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #8 : Декабря 21, 2011, 06:06:31 pm »
Поставил 5.0.2 с utf-8.

При создании товара с кавычками елочками в названии:

386 Блейзер «Капучино» Marani

 в Администрировании/Каталог/Товары отображается такая фигня:

386 Блейзер В«КапучиноВ» Marani

Если название с кавычками добавить в поле Дополнительно/Метки после первого нажатия "сохранить":

386 Блейзер В«КапучиноВ» Marani

после второго:

386 Блейзер ВВ«КапучиноВВ» Maran,

третьего:

386 Блейзер ВВВ«КапучиноВВВ» Mar,

и так далее.

Что за глюк? В 4.6 под виндовс 1251 у меня такого не было - кавычки елочки использовал во всю!

sadko

  • Гость
Re: Поддержка кавычек в наименованиях и заголовках
« Ответ #9 : Декабря 21, 2011, 09:19:03 pm »
Ужос! Только что посмотрел по всему сайту, где использовал кавычки-елочки и хранил их базе данных появились буквы "В". Кошмар какой-то! Как это полечить? :'(

К примеру:
Посылка службой доставки ВВ«Нова поштаВВ» по Украине (основной способ доставки)

vld

  • Гость
Та же проблема с кавычками . Как вылечить, подскажите?