Поддержка Проблемы и решения Русские буквы в сылке и в БД, как правильно

  • привет всем,
    установил вордпресс и обнаружил что ссылку на русском он обрезает до примерно 33знаков, поскольку в БД размер таблицы установлен varchar(200) а русские буквы перекодируются (зачем-то) в какие-то непонятные значки с процентами, что одна буква превращается в 6 знаков.
    Как отключить это перекодирование чтоб русские буквы нормальным образом сохранялись в БД?

    Не надо пожалуйста только говорить про невозможность этого — ибо: чем отличается русская буква Г от якобы нормальной латинской L, русская T от латинской t, русские НОРМСХУЕАВ и прочие от точно таких же на латыне???
    На ДЛЕ я кстати исправил данный момент и русские буквы нормальным образом сохраняются в БД, заменив в коде [^a-z0-9\_\-] на
    [^(\w)|(\x7F-\xFF)|(0-9)|(\_\-.)]
    И никаких проблем не возникает и никакой необходимости в замене русских букв на какие-то проценты нет.
    Как это можно исправить в БД

    Спасибо

Просмотр 15 ответов — с 16 по 30 (всего 56)
  • Не расскажите нам сирым?

    Во-первых вопрос адресовался не Вам. Во-вторых: это лучше Вы мне расскажите, как убрать кодирование букв.. А то Вы о чём угодно говорите, но только не о сути вопроса.
    Я кстати сказал: в основном на Линукс-системах, у которых никаких проблем с UTF или русскими буквами нет

    Первые IBM и Pentium-ы появились (массово) в 90х, именно это я и имел ввиду, когда указал когда была изобретена кодировка UTF, в ответ на утверждения «про подождать пока вся цифра начнет понимать кодировку»

    Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    Во-первых вопрос адресовался не Вам.

    А я Вас спросил.

    это лучше Вы мне расскажите, как убрать кодирование букв..

    Всего-то и нужно — создать свой интернет, где протоколы будут поддерживать кириллицу. А пока этого нет и в обозримом будущем не будет. (На счёт пары лет wikicms сильно погорячился 😉 )

    кодировка UTF

    Подумайте — где и как «это» происходит.

    А я Вас спросил.

    Тоже не знаете? 🙂 — я как в том же сообщении написал, так и позже: на Линукс системах, на которых нет никакой проблемы с русскими буквами.
    У mysql (если она используется) также нет никакой проблемы с УТФ.. В броузерах тоже нет никакой проблемы с УТФ, даже в самых древних.
    Проблема только в том что вордпресс, прежде чем сохранить ссылку в БД, её перекодирует в непонятные и никому не нужные проценты, которые занимают в 6 раз больше места, которые и выдаются потом в адресную строку, вместо того чтоб сохранять нормальным образом ссылку в кодировке утф.

    Всего-то и нужно — создать свой интернет

    Всё давно придумано и создано, а вот при чем тут интернет вообще непонятно 🙂

    Подумайте — где и как «это» происходит.

    Поскольку я не знаю где это происходит — то и спросил

    где протоколы будет поддерживать кириллицу

    при чем тут это вообще? … При чем тут протокол?: )) ..

    Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    при чем тут это вообще?

    как бэ при том, что

    выдаются потом в адресную строку,

    и

    в какие-то непонятные значки с процентами

    🙂

    Ещё раз — изучение выше данных ссылок поможет понять так страстно искомую суть 🙂
    Там же содержится и ответ на:

    Поскольку я не знаю где это происходит — то и спросил

    :))) … ПРОТОКОЛ тут ни при чем.. Протокол ПЕРЕДАЧИ данных вообще НИ ПРИ ЧЕМ… Всё равно что трубе без разницы, что через неё качают: газ, золото или навоз …

    Вы вообще понимаете что я говорю? Я же сказал, что с той же ДЛЕ (DLE — система cms такая) НЕТ… ПоНИМАЕТЕ … НЕТ! никакой проблемы с сохранением в базу данных русских букв в том виде как они есть и их соответственно выводом оттуда тоже нет никаких проблем! … (после некоторых изменений в коде, как сказал)

    Я ж по-русски пишу вроде.
    В противном случае исходя из Ваших умозаключений про протоколы следует то, что текст написанный на русском не сохраняется и в БД. Точнее не передаётся. Вы ж про протокол говорите. Что есть неправильно, поскольку говорю исходя из своего опыта: сохраняется все и выводится всё без проблем: в кодировке утф.

    Где отключить кодирование букв в эти проценты, кто-нибудь знает?

    хотя так и не пойму при чем тут протокол :)) .. Вот есть протокол http, по которому и передаются данные: от сервера — броузеру… Русские буквы передаются не в открытом виде (чтоб говорить о проблемах с протоколом), а в кодировке УТФ: (а можно также еще и в кои или вин-1251 (вроде)) которая прекрасным и нормальным образом передается по пртоколу хттп от сервера Линукс любому броузеру .. только это все не имеет в данный момент значения, потому как передаются данные ИЗ БД.. А в БД, в данном случае эти данные были сохранены в виде каких-то там ПРОЦЕНТОВ … Соответственно в адресной строке НИЧЕГО ИНОГО КРОМЕ КАК ПРОЦЕНТОВ И НЕ МОЖЕТ появиться.
    Я русский текст могу сохранить в БД в нормальном виде используя кодировку УТФ… НЕТ проблем! .. Зачем мне кодировать его в 6-ти значные процентные значки??
    Проблема только в том, что сейчас этот русский текст ПЕРЕКОДИРУЕТСЯ в проценты и в таком убогом виде сохраняется в БД…

    ГДЕ отключить это кодирование в проценты?

    Кстати, на Джумле (joomla- тоже система cms такая), также нет никаких проблем с сохранением русских букв в БД в нормальном виде.

    Модератор Юрий

    (@yube)

    Добавьте в functions.php активной темы строку

    remove_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3 );

    и в будут Вам в post_name русские буквы.

    Только чур потом не обижаться!

    хорошо, попробую, спасибо.
    Да какие обиды..

    @e-alexey

    Кодировка UTF изобретена согласно википедии еще в далеком 1992

    Угу, а зачатки URL еще раньше http://ru.wikipedia.org/wiki/URL (кстати, там ссылки и на спецификации есть).

    А при чем тут кстати цифра (цифровая техника)? )) .. Вы видимо не знаете просто на чем работают сайты, да? :))

    Цифра — это сокращенка. И по сайтам ничего не понял.

    К слову: кодировка UTF широко используется в линукс системах, коими являются абсолютное количествто серверов в интернете. И в линуксе с русскими символами также нет никаких проблем. Проблема в данном случае лишь в том, что кому-то зачем-то пришло в голову перекодировать русские буквы в непонятные проценты, хотя они элементарно сохраняются в базе данных в кодировке UTF..

    Это сделано для снижения нагрузки, лучше один раз до записи в БД правильно закодировать (согласно действующей спецификации) и просто извлекать, чем после извлечения постоянно кодировать. Чувствуете разницу?

    Проблемы с кодировкой нет. Есть в головах

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

    Новую спецификацию введут и все вздохнут с облегчением :))
    Засим откланиваюсь.

    Всё понятно. Откляняюсь ничего не ответив =)

    кстати, там ссылки и на спецификации есть

    Это все не особо важно (в данном вопросе). Я же уже несколько раз повторил что мне надо в БД ссылку сохранять в нормальном виде, иначе она сильно обрезается (до 30-40 знаков).. Её можно также и в кои и в вин1251 сохранять: не имеет значения.
    Зачем кодировать в ПРОЦЕНТЫ? Всё элементарно сохраняется в нормальном виде а проценты разносят базу данных.. Точнее при одном и том же размере таблицы БД пользователь получает более короткую ссылку. Таким образом кодирование в проценты делает автоматически использование русских букв АБСОЛЮТНО нецелесообразным, а это не есть правильно.

    Это сделано для снижения нагрузки лучше один раз до записи в БД правильно закодировать

    Зачем кодировать к примеру те же: АВМТРОКУЕНСХ? Во-вторых, я бы как-то сам решал, что мне важнее: нагрузка или размер ссылки. Для меня важнее ссылка, а техника для того и есть чтоб решать поставленные задачи.

    Кстати а чем ПО СУТИ отличается ссылка от содержимого текста ? — да НИЧЕМ! .. Но ведь с представлением содержимого сайта нет никаких проблем. И оно не сохраняется в каких-то там процентах … и так далее короче.

    чем после извлечения постоянно кодировать

    а ссылка в виде процентов по Вашему выходит не кодируется обратно в нормальный текст? — кодируется. Так что те же яйца только сбоку, но при этом база данных в 6 раз больше, (а точнее ссылка меньше) что тоже кстати влияет на производительность и на извлечение данных их нее.
    (можно привести аналогию с архивами: никогда не закачивали на сервер файлы в архиве и распакованные? Быстрее, проще и с меньшей нагрузкой загружаются файлы помещенные в архив. Так что по-моему один знак в утф проще вынуть из БД чем тот же знак закодированный в виде 6ти значных процентов. Не говоря о том, что вручную БД Вы уже править не сможете, если вдруг что-то случится )
    В общем ненужный геморрой

    Обновление спецификаций идет медленно

    Еще раз повторю и в Джумле и в ДЛЕ (и в Магенте вроде) ссылка сохраняется в БД в нормальном виде..
    Возможно она потом после копипаста из адресной строки и примет вид всё тех же процентов, но меня сейчас интересует только сохранение ссылки в БД в нормальном виде а не в каких-то там процентах. Потому что проценты занимают в 6 раз больше места в БД

    Например, тем же поисковым системам??

    Вообще всё в мире должно быть ориентировано в первую очередь ПОД человека и ДЛЯ человека.
    Все это вспомогательные инструменты: они для человека вспомогательны, а не наоборот.

    Добавьте в functions.php активной темы строку

    remove_filter( ‘sanitize_title’, ‘sanitize_title_with_dashes’, 10, 3 );

    и в будут Вам в post_name русские буквы.

    да, отключив фильтр, ссылки добавляются в нормальном виде, но некоторая проблема: пробелы (и видимо другие знаки) не заменяются на скажем — (тире)

    Нашел в сети такой вариант для замены точек в ссылке на тире: (добавил строчку для пробелов)

    remove_filter(‘sanitize_title’, ‘sanitize_title_with_dashes’);
    add_filter(‘sanitize_title’, ‘my_sanitize_title’);

    function my_sanitize_title($title) {
    $title = str_replace(‘.’, ‘-‘, $title);
    $title = str_replace(‘ ‘, ‘-‘, $title);
    $title = sanitize_title_with_dashes($title);
    return $title;
    }

    В итоге проба ссылки превратилась в проба-ссылки, но в БД опять проценты.

    И еще хотел спросить что означают значения 10 и 3 в приведенной Вами функции?

    Модератор Юрий

    (@yube)

    И еще хотел спросить что означают значения 10 и 3 в приведенной Вами функции?

    Приоритет и кол-во аргументов. Подробности в Кодексе http://codex.wordpress.org/Function_Reference/remove_filter

    понятно, спасибо.
    Правда исправленная мною функция не работает: в БД опять сохраняются проценты.
    Отключать function sanitize_title_with_dashes скорее всего не стоит, её надо исправить, чтоб корректно обрабатывала символы и не кодировала их в проценты

Просмотр 15 ответов — с 16 по 30 (всего 56)
  • Тема «Русские буквы в сылке и в БД, как правильно» закрыта для новых ответов.