Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > конвертация из bin2hex() в норм. строку. КАК ?


Автор: numerovan 24.10.2009, 06:38
Ситуация такая ... мне нужно сделать сайт на двух языках : на немецком и на русском . В немецком алфавите есть так называемые УМЛАУТЫ , utf-8 их хорошо различает, а вот в windows-1251 проблема , но есть замена их на "Ä" и т.д.. В utf-8 кириллица весит в 2 раза больше чем на windows-1251, поэтому не хочу ради 5 символов менять кодировку.
Я сделал следующее : имеется строка с этими УМЛАУТАМИ , строку перевожу с помощью bin2hex() , от тудова по поду символа заменяю на "Ä" и т.д. ... а после хочу обратно строку в нормальный вид перекодировать, но что т не получается ... Можно конечно посимвольно распознать и заменить, боюсь что нагрузка на сервер будет хорошая. НЕ ПОДСКАЖЕТЕ МОЖЕТ ЕСТЬ КАКАЯ НИБУДЬ ФУНКЦИЯ , КОТОРАЯ ПРЕОБРАЗОВЫВАЕТ В ЧИТАБЕЛЬНЫЙ ВИД ?

Вот что у меня есть :
Код

function convert_de($word){
    $word = bin2hex($word);
    $word = str_replace("c39c", "Ü", $word);
    $word = str_replace("c3bc", "ü", $word);
    $word = str_replace("c396", "Ö", $word);
    $word = str_replace("c3b6", "ö", $word);
    $word = str_replace("c384", "Ä", $word);
    $word = str_replace("c3a4", "ä", $word);
    $word = str_replace("c39f", "ß", $word);
    $word = bindec($word); // <--- вот тут надо обратно переконвертировать
    return $word;
}

Автор: youri 24.10.2009, 06:48
расслабься и используй utf-8 ;)

Автор: numerovan 24.10.2009, 07:58
Скажу почему я не хочу использовать utf-8, потому что она увеличивает кириллицу, а у меня там кириллицы будет очень много ... ради нескольких символов не хочится жертвовать дисковым пространством. Да дело даже и не в пространстве ... просто реально интересно ... А МОЖНО ЛИ ПЕРЕКОНВЕРТИРОВАТЬ ... если так , то почему бы и нет ?

Автор: Ипатьев 24.10.2009, 09:07
Очень смешная причина не исползовать UTF. Дисковое пространство просто трещит по швам.

Автор: Wolf1994 24.10.2009, 10:00
Попробуйте заменять оригинальные символы, без перевода в шестнадцатеричный формат.

Автор: numerovan 24.10.2009, 23:32
Мужики,  я понимаю Вам смешно от этой ситуацией , но как говориться ЗАЧЕМ ПЛАТИТЬ БОЛЬШЕ, КОГДА МОЖНО ЗАПЛАТИТЬ МЕНЬШЕ ... я так к слову ...

"Попробуйте заменять оригинальные символы, без перевода в шестнадцатеричный формат" - функция bin2hex() кодирует ВСЮ строку сразу, после я могу выследить эти УМЛАУТЫ , по другому не вижу способа для отслежки. Хотя можно и по символьно отслеживать и заменять ... ну вот встречный ворос КАК ЭТО БУДЕТ ВЛИЯТЬ НА РЕСУРСЫ СЕРВЕРА ?

Помоему чтоб отследиь посимвольно это идея ... ))

КТО НИБУДЬ ЗНАЕТ КАК ПРОВЕРЯТЬ КОД НА ПРОИЗВОДИТЕЛЬНОСТЬ ? Т.Е. Я НАПИСАЛ КОД, ДОПУСТИМ, И МНЕ ПО ВРЕМЯНИ ПОКАЗЫВАТЬСЯ ЧТО ОН ВЫПОЛНИЛСЯ ДОМУСТИМ В 0.5 СЕК , ДАЛЕЕ ПЕРЕПЕСАЛ КОД , В ЛУЧШУЮ СТОРОНУ И МНЕ ПОКАЗЫВАТЬСЯ ЧТО КОД ВЫПОЛНИЛСЯ ЗА 0.2 СЕК .... КТО ЗНАЕТ КАК ТАК СДЕЛАТЬ ?

Автор: bars80080 25.10.2009, 01:05
Цитата(numerovan @  24.10.2009,  23:32 Найти цитируемый пост)
КТО НИБУДЬ ЗНАЕТ КАК ПРОВЕРЯТЬ КОД НА ПРОИЗВОДИТЕЛЬНОСТЬ ? 

microtime() или getmicrotime() поможет



Цитата(numerovan @  24.10.2009,  23:32 Найти цитируемый пост)
но как говориться ЗАЧЕМ ПЛАТИТЬ БОЛЬШЕ, КОГДА МОЖНО ЗАПЛАТИТЬ МЕНЬШЕ

возникает серьёзный вопрос: а в каком случае больше, а в каком меньше?

Автор: numerovan 25.10.2009, 06:56
Цитата

возникает серьёзный вопрос: а в каком случае больше, а в каком меньше?

В итоге будет сайт знакомств ... где русскоязычные будут пополнять базу своими сообщениями и через год эта база будет весить в 2 раза больше нежели если было бы всё в кодировке windows-1251, а не в utf-8 ... из-за этого я так говорю.

Добавлено через 1 минуту и 6 секунд
 ЕСТЬ КАКАЯ НИБУДЬ ФУНКЦИЯ , КОТОРАЯ ПРЕОБРАЗОВЫВАЕТ В ЧИТАБЕЛЬНЫЙ ВИД ?

Автор: NLspieler 25.10.2009, 07:34
Для сайта знакомств все же лучше использовать utf. 
Вдруг пользователю захочется написать сообщение на китайском или зимбабвянском?

Кроме того, если я не ошибаюсь, если поставить на страницу кодировку windows-1251,
то "ü" , "ö" , "ä" будут приходить без точек, а вместо ß будет приходить пробел. 


Автор: bars80080 25.10.2009, 10:42
Цитата(numerovan @  25.10.2009,  06:56 Найти цитируемый пост)
возникает серьёзный вопрос: а в каком случае больше, а в каком меньше?

В итоге будет сайт знакомств ... где русскоязычные будут пополнять базу своими сообщениями и через год эта база будет весить в 2 раза больше нежели если было бы всё в кодировке windows-1251, а не в utf-8 ..

я спрашивал не про объёмы на жёстком диске, а про "платить". по моему всем этим гемором ты уже платишь больше, чем пришлось бы с ютф. мало того, за впоследствии возникающие косяки тоже придётся расплачиваться.
если бы ты нанимал работника за настоящую деньгу, а не транжирил собственное время, то я думаю для тебя вопрос решился бы быстро. за что платить больше

Автор: Bishop 25.10.2009, 14:01
numerovan
судя по приведенному коду, вы вообще не понимаете, что в нем происходит.

Почему вы тогда не пишете просто:
Код

...
str_replace("ц", "&ouml;", $word); // "ö"
...


Хотя ищете вы похоже такой выход:
Код

function convert_de($word){
return htmlentities($word)
}

Цитата
КАК ЭТО БУДЕТ ВЛИЯТЬ НА РЕСУРСЫ СЕРВЕРА

отрицательно
Цитата
через год эта база будет весить в 2 раза больше нежели если было бы всё в кодировке windows-1251, а не в utf-8

не в два. Экономя дисковые ресурсы, вы тратите больше ресурсов процессора. При этом ограничиваете себя и пользователей.
Цитата
не хочу ради 5 символов менять кодировку

а потом вы вспомните про украинский алфавит, где тоже всего-то два (не знаю сколько) символа дополнительных, потом белорусский…

Самое главное: пользователь с немецким интерфейсом не сможет общаться с пользователем с русским интерфейсом ни на каком языке. Но зачем я это вам рассказываю. Главное для вас место на диске — решение я привел выше.

Правильный же ответ уже озвучен: использовать utf8.

Автор: MoLeX 26.10.2009, 07:27
Цитата(numerovan @  25.10.2009,  06:56 Найти цитируемый пост)
ЕСТЬ КАКАЯ НИБУДЬ ФУНКЦИЯ , КОТОРАЯ ПРЕОБРАЗОВЫВАЕТ В ЧИТАБЕЛЬНЫЙ ВИД



 ! 
MoLeX


есть модератор который не будет преобразовывать ваш текст ал-ля блондинко, а просто удалит его и поставит вам предупреждение, конечно если вы не будете жать шифт то это не произойдет


Автор: numerovan 3.11.2009, 07:55
Всё мужики понятно ... Правильно подметили что ещё и украинский там о своём даёт знать и белорусский и т.д. Понятно - ЛУЧШЕ ИСПОЛЬЗОВАТЬ UTF-8 !

кстати
Цитата

Кроме того, если я не ошибаюсь, если поставить на страницу кодировку windows-1251,
то "ü" , "ö" , "ä" будут приходить без точек, а вместо ß будет приходить пробел.

эти символы будут не правильно отоблажаться, Вы правильно подметили, поэтому я пользовался функцией bin2hex(), которая переводила в 16-ый вид , а после я находил эти УМЛАУТЫ и заменял их на нормальный вид (&ouml;)

Цитата

Почему вы тогда не пишете просто:
str_replace("ц", "&ouml;", $word); // "ö"

В первое значение функции str_replace() НЕ ПРИХОДИТ символ кириллицы, немецкие УМЛАУТЫ не распознаются так, поэтому я пользовался функцией bin2hex(), это как бы компрамис между кодировками.
Цитата

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

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

есть модератор который не будет преобразовывать ваш текст ал-ля блондинко, а просто удалит его и поставит вам предупреждение, конечно если вы не будете жать шифт то это не произойдет

Что это за ПРЕДЛОЖЕНИЕ , я так и не понял ).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)