Не работают символы ž ä ü и подобные

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Не отображаются спецсимволы ž ä ü ç ý ö в комментариях, статусах, блогах

#1 12 сентября 2011 в 09:31
Всем доброго дня. Столкнулся с проблемой:
Не отображаются спецсимволы ž ä ü ç ý ö в комментариях, статусах, блогах.
Если написать в коммент символы ž ä ü ç ý ö, то они выйдут как &#_382; &#_228; &#_252; &#_231; &#_253; &#_246; (без знака "_", поставил его что бы было видно)
а В статусе если писать обычный текст и вставить в середине такой символ, то весь текст после символа как и он сам просто пропадут, и даже в базу не записываются)

Хотя у вас тут на сайте заметил что все Отлично. пожалуйста подскажите — Почему так? подскажите как исправить?
Заранее благодарен.
#2 12 сентября 2011 в 09:33
Ну я же говорил что на этом сайт все отлично отображается! Пожалуйста, Администрация — скажите как Вы это сделали
#3 13 сентября 2011 в 08:49
Проходил мимо, в Админке, есть настройки — выбор кодировки для компонента Комментарии пользователей + аякс, не аякс. Попробуйте.
#4 13 сентября 2011 в 12:03
Да Madmax, спасибо большое я об этом тоже в первую очередь подумал. Не смена кодировки не -аякс не +аякс не помогло разницы нет.
Кстати заметил что здесь в блоге на сайте тоже самое происходит тоесть видно только код. к сожалению не могу показать. Запись удалили.
Дело в том что в саму базу спец символы записываются не как они есть а их кодом. Во всяком случае должны. А тут почему то там добавляется пара лишних символов (не помню какие, тут у меня Денвера нет), затем эти символы при отображении страницы вычитаются и выходит чисто их код, хотя нужно что бы были буквы.

Я из за этого не могу окткрыть свой самый большой проект😥Это будет первая Туркменская Социальная сеть. А куда ей без Туркменского языка
#5 13 сентября 2011 в 13:30
Аналогично, только у меня еще и букву "В" (Русская "в") тупо рекодит в "#1074", букву "П" в "#1055"
Что с этим делать? Рекодит только там, где есть визуальный редактор…
#6 13 сентября 2011 в 19:06
Проходил мимо, Спецсимволы экранируются перед по падением в базу, это защищает её от зловредного кода.
#7 13 сентября 2011 в 19:54

Проходил мимо, Спецсимволы экранируются перед по падением в базу, это защищает её от зловредного кода.

Михаил М.
А каким образом экранируются буквы "в" и "п"?
#8 14 сентября 2011 в 09:25
Михаил
Подобную защиту от XSS наблюдал в VBulletin.
Я вот только не понимаю 1 — Ну и что что "экранируют" перед базой. Почему потом нормально на сайте не отображаются или даже пропадает весь текст? 2 — Тогда почему на здесь на сайте нормально отображаются на форуме?
#9 14 сентября 2011 в 11:01
Движок недоработаный, символы сохраняет в кодировке кириллицы. Делаем следущее, переводим всю базу в кодировку uft8 unicode, далее качаем все файлы сайта на компьютер, качаем программу массового перевода файлов в формат uft8, для этого пригодятся 2 программы, одна для массового перевода файлов в формат uft8, вторая для массового удаления boom с файлов. Название программ не помню, ищите в яндексе, после качаем все файлы на сервер с заменой. Вот вам и двиг полностью в кодинге uft8, после этого будут работать все символы!
#10 14 сентября 2011 в 11:03
перед по падением в базу htmlspecialchars(), а перед выводом на сайт html_entity_decode(), тогда все спецсимволы экронированы в безе и выведены на сайте как и задуманы

А каким образом экранируются буквы "в" и "п" ?

Михаил
Они не экронируются, проверьте для начала кодировку базы.
#11 14 сентября 2011 в 11:03
да и не забудьте в метатегах в индекс изменить кодировку сайта в юфт, или можно в файле htaccess задать основную кодировку, на вопросы как поменять кодировку в метатегах и в хтассесс ответит яндекс.
#12 14 сентября 2011 в 11:15

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

GoodBoy
в добавок к этому весь icov('utf-8','cp1251',..) поменять hoho
#13 14 сентября 2011 в 11:28

Движок недоработаный, символы сохраняет в кодировке кириллицы. Делаем следущее, переводим всю базу в кодировку uft8 unicode, далее качаем все файлы сайта на компьютер, качаем программу массового перевода файлов в формат uft8, для этого пригодятся 2 программы, одна для массового перевода файлов в формат uft8, вторая для массового удаления boom с файлов. Название программ не помню, ищите в яндексе, после качаем все файлы на сервер с заменой. Вот вам и двиг полностью в кодинге uft8, после этого будут работать все символы!

GoodBoy

Уважаемый не говорите чуши, вы так сами хоть делали? для чего раздавать советы другим, если вы даже не имеете представление о том что нужно делать чтобы система работала на УТФ8. Простое тупое конвертирование ни к чему хорошему не приведет, только завалит сайт и он будет не рабочий.
Могу сказать что с конвертировать файлы это только 1% от работы необходимой проделать по переводу на утф. Просто пример нужно заменить в 2500 файлах все операторы которые работаю со строками например str_pos, substr и прочее. Ибо у строки в УТФ8 другой признак конца строки, если не сделать замены то вы первые увидите в модуле последних сообщений или комментариев в конце строки, которая обрезается, символы ромбиков!

Поэтому, если вы не знаете как и что делать на 100% правильно, воздержитесь от комментирования и абсурдных советов.
#14 14 сентября 2011 в 13:21
еслиб не пробовал, не написал бы, а функция str и substr это для вырезки текста, я правда не хорошо знаком с этим движком, т.к готовые движки не мое, можно в принципе сделать один файл trucate.php для примера для функции str чтоб не нагружать двиг, но не пойму, при чем тут функция str? эта функция будет работать независимо от кодировки, только значение нужно увеличить примерно в 2 раза, т.к попадаются символы в uft которые значат 2 символа в cp.
#15 14 сентября 2011 в 14:04

только значение нужно увеличить примерно в 2 раза

GoodBoy
напомнило анекдот:
— Товарищ прапорщик, сколько будет 60 разделить на 3?
— Приблизительно 20!

GoodBoy, вы пишете глупости, maxisoft прав. Одного конвертирования файлов недостаточно. Нужно везде менять вызовы всех функций, работающих со строками, на их мультибайтовые аналоги. Потому что для хранения строк в кодировке cp1251 используется 1 байт, в utf-8 — 2 байта. Стандартные строковые функции PHP не умеют работать со строками, в которых символ представлен более чем 1 байтом. Соответственно, если тупо все сконвертить в utf, движок начнет работать непредсказуемым образом.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.