Помощник
|
Переходим на юникод |
PRStudio
|
Сообщение
#1
|
||
|
|
||
|
|||
A1ex_hb |
3.9.2012, 21:34;
Ответить: A1ex_hb
Сообщение
#2
|
|
С каких пор str_replace и substr не обрабатывют юникод?
Я стараюсь все скрипты писать в юникоде, никогда проблем со строковыми функциями не было. |
|
|
PRStudio
|
Сообщение
#3
|
|
Все обработают юникод, но могут отработать некорректно, для этого и придумали функции mb_*
Т.е. если корректно работает скрипт у вас, то совершенно неясно, будет ли он также работать у китайцев: линк Поэтому и задал такой вопрос, имеет ли смысл переписывать эти функции, или разработчики опустили их из-за полной совместимости с "многобайтовыми кодировками" |
|
|
Muxa_hb |
4.9.2012, 18:12;
Ответить: Muxa_hb
Сообщение
#4
|
|
кто сказал что их нет? :nea:
почитайте получше про mb_* функции например такая как mb_str_replace str_replace ищет по заданным символам, ей без разницы в скольких они там байтах - в одном, двух, трех или десяти. заданы то они полностью - он заменит полное совпадение Это же касается и substr а что, mb_substr() вдруг перестала работать? :sarcastic: |
|
|
Muxa_hb |
4.9.2012, 18:17;
Ответить: Muxa_hb
Сообщение
#5
|
|
A1ex, нет никаких черных ромбиков со знаком вопроса? [PHP]<?php header('Content-type: text/html; charset=utf-8');
$text = 'Привет'; echo substr($text,0,3); ?>[/PHP] или вот еще пример, доказывающий что пых проверяет по байту а не по символу (а в UTF-8 каждый русский символ в два байта) [PHP]<?php header('Content-type: text/html; charset=utf-8'); $text = 'Привет'; #а потом замени на $text = 'Helloo'; echo isset($text[7]) ? 'Больше 7 байтов' : 'Меньше 7 байтов'; ?>[/PHP] |
|
|
PRStudio
|
Сообщение
#6
|
|
|
Почитал комментарии, да и сам побаловался с китайскими и еще черт знает с какими иероглифами, действительно работает нормально. Перечитал комментарии на PHP.net, и тоже убедился, что все работает нормально, и проблемы возникают только при несовпадении кодировок (если данные берутся извне). А то я тут уже обертки str_replace, substr_replace написал, думал продолжить, теперь хоть остановлюсь :sarcastic:
|
|
|
||
|
Текстовая версия | Сейчас: 24.4.2024, 12:45 |