Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как сравнить переменные типа string и mbstring?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как сравнить переменные типа string и mbstring?
kosal
Отправлено: 24 Июня, 2011 - 10:51:14
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Задача по-моему очень интересная и ответа я пока не нашел на всем просторе рунэта..может кто-нибудь знает с помощью каких функций можно произвести преобразование типа переменной из string в mbstring.

(Отредактировано автором: 24 Июня, 2011 - 12:10:47)

 
 Top
Мелкий Супермодератор
Отправлено: 24 Июня, 2011 - 10:57:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Строка в PHP - суть массив байтов и типа данных mbstring не существует, mb_ - лишь надстройка над строковыми функциями, чтобы последние учитывали символы, а не байты.

Короче, сравниваются обычным сравнением ==. При необходимости, можно кодировку поменять с помощью iconv

(Отредактировано автором: 24 Июня, 2011 - 11:01:14)



-----
PostgreSQL DBA
 
 Top
kosal
Отправлено: 24 Июня, 2011 - 11:10:20
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Мелкий пишет:
Строка в PHP - суть массив байтов и типа данных mbstring не существует, mb_ - лишь надстройка над строковыми функциями, чтобы последние учитывали символы, а не байты.

Короче, сравниваются обычным сравнением ==. При необходимости, можно кодировку поменять с помощью iconv


Нет, когда смотрим строку var_dump-ом, ф-ия показывает что в строке больше символов чем на экране примерно вдвое, т.е. "Привет", она читает как string(12) "Привет"
 
 Top
EuGen Администратор
Отправлено: 24 Июня, 2011 - 11:24:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




var_dump и будет показывать так.
А что Вас смущает? Оно показывает длину в байтах, не в символах.
Сравнивайте как Вам сказали.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
kosal
Отправлено: 24 Июня, 2011 - 11:38:42
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




EuGen пишет:
var_dump и будет показывать так.
А что Вас смущает? Оно показывает длину в байтах, не в символах.
Сравнивайте как Вам сказали.


))) Думаете я не сравнивал, сразу на форум отписал о проблеме что ли?))) результат сравнения false, хотя значение переменной и строки идентично!

Вот код:

PHP:
скопировать код в буфер обмена
  1. var_dump(($arResult["FORM_NOTE"]) == 'Спасибо! Ваша заявка принята!')

результат bool(false)


string('57') 'Спасибо! Ваша заявка принята!'

(Отредактировано автором: 24 Июня, 2011 - 11:44:42)

 
 Top
OrmaJever Модератор
Отправлено: 24 Июня, 2011 - 11:44:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




kosal пишет:
Думаете я не сравнивал

как вы это делали? Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
kosal
Отправлено: 24 Июня, 2011 - 11:48:33
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




OrmaJever пишет:
как вы это делали? Однако


код выше написал
 
 Top
OrmaJever Модератор
Отправлено: 24 Июня, 2011 - 11:51:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Нужно зделать вот так
PHP:
скопировать код в буфер обмена
  1. var_dump($arResult["FORM_NOTE"]);
  2. var_dump('Спасибо! Ваша заявка принята!');

и посмотреть в какой кодировке написана 2 строка


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 24 Июня, 2011 - 11:57:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




kosal пишет:
string('57') 'Спасибо! Ваша заявка принята!'

В этой строке 53 байта, у вас что-то лишнее передаётся - \r,\n,тэги какие-нибудь..


-----
PostgreSQL DBA
 
 Top
kosal
Отправлено: 24 Июня, 2011 - 12:01:01
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




OrmaJever пишет:
посмотреть в какой кодировке написана 2 строка


PHP:
скопировать код в буфер обмена
  1.  
  2.       var_dump($arResult["FORM_NOTE"]);
  3.       var_dump('Спасибо! Ваша заявка принята!');
  4.  


string(57) "Спасибо! Ваша заявка принята!"
string(53) "Спасибо! Ваша заявка принята!"

PHP:
скопировать код в буфер обмена
  1.  
  2.       var_dump(mb_detect_encoding($arResult["FORM_NOTE"]));
  3.       var_dump(mb_detect_encoding('Спасибо! Ваша заявка принята!'));
  4.  


результат:
string(5) "UTF-8"
string(5) "UTF-8"
 
 Top
OrmaJever Модератор
Отправлено: 24 Июня, 2011 - 12:03:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




kosal пишет:
string(57) "Спасибо! Ваша заявка принята!"
string(53) "Спасибо! Ваша заявка принята!"

теперь понятно почему false? 4 байта лишних. Скорее всего
Мелкий пишет:
В этой строке 53 байта, у вас что-то лишнее передаётся - \r,\n,тэги какие-нибудь..


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
kosal
Отправлено: 24 Июня, 2011 - 12:04:18
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Мелкий пишет:
kosal пишет:
string('57') 'Спасибо! Ваша заявка принята!'

В этой строке 53 байта, у вас что-то лишнее передаётся - \r,\n,тэги какие-нибудь..


Как это проверить, не лазая в исходный код, где определяется переменная? Веренее как узнать, что это за 4 байта?

(Отредактировано автором: 24 Июня, 2011 - 12:07:15)

 
 Top
Мелкий Супермодератор
Отправлено: 24 Июня, 2011 - 12:05:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Посмотреть исходный код страницы. (не скрипта!)


-----
PostgreSQL DBA
 
 Top
kosal
Отправлено: 24 Июня, 2011 - 12:09:35
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Огромное всем спасибо, что помогли разобраться!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB