Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из строки 32 символа получить 31 символ? 
:(
    Опции темы
aleks357
Дата 29.6.2011, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 29.6.2011

Репутация: нет
Всего: нет



Как из строки 32 символа получить 31 символ?
PM MAIL   Вверх
MoLeX
Дата 29.6.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



substr || mb_substr


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Guedda
Дата 29.6.2011, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 13
Всего: 78



Код

$result = substr($str, 0, strlen($str) - 1);



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
MoLeX
Дата 29.6.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Guedda, можно намного проще
Код

$result = substr($str, 0, -1);



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Shogun
Дата 29.6.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

Репутация: 9
Всего: 11



Для колекции: smile
Код

$str[30]



--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
MoLeX
Дата 29.6.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Shogun, попробуй сначало


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Absinthe
Дата 29.6.2011, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Если речь идет о символах - то mb_substr.
Если о байтах - substr.
PM MAIL   Вверх
MoLeX
Дата 30.6.2011, 05:22 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



http://www.php.ru/manual/function.substr.html
http://www.php.ru/manual/function.mb-substr.html

что-то я не увидел упоминание о байтах.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Absinthe
Дата 30.6.2011, 12:59 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Ну документация кривовата, в PHP не редкость smile

Код

$s = "Обычная UTF-8 строка";
var_dump(substr($s, 3, 4)); // вырезаем 4 байта. Это 1 символ и 2 половины символов.

PM MAIL   Вверх
MoLeX
Дата 30.6.2011, 13:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



на документацию нечего грешить.
substr - для однобитных кодировок
mb_substr - для многобитных


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Absinthe
Дата 30.6.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



MoLeX, где это написано в документации по substr? Точную цитату со страницы http://php.net/manual/en/function.substr.php
PM MAIL   Вверх
MoLeX
Дата 30.6.2011, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



 smile  smile  smile 
будем вспоминать сотворение мира?

сначала в PHP были однобайтовые кодировки, и поэтому нечего более substr() не требовалось.
Затем сообщество захотелось большего, но проблема возникла тут же. В итоге появился mb_substr

Точная цитата будет с другой страницы:
Цитата(mb_substr)

Performs a multi-byte safe substr() operation based on number of characters. Position is counted from the beginning of str. First character's position is 0. Second character position is 1, and so on. 



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Absinthe
Дата 30.6.2011, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Да кака разница, какие причины?
В любом случае в документации substr ошибка.

И в любом случае может потребоваться получать байты с UTF-8 стрки(например при разбивке пакетов). И это будут байты, а не символы.

Спорить то зачем?
PM MAIL   Вверх
MoLeX
Дата 30.6.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



где ошибка? в чем она?


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Absinthe
Дата 30.6.2011, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Заменить "символ" на "байт"
PM MAIL   Вверх
MoLeX
Дата 1.7.2011, 05:26 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



так это не ошибка. во времена однобайтовых кодировок символ == байт


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Absinthe
Дата 1.7.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



MoLeX, "символов" написано не где-то в http://web.archive.org/web/19990507233406/...ion.substr.php3, а сегодня в 2011 году.
PM MAIL   Вверх
Shogun
Дата 1.7.2011, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

Репутация: 9
Всего: 11



Цитата(MoLeX @  29.6.2011,  14:06 Найти цитируемый пост)
Shogun, попробуй сначало 

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

Absinthe, MoLeX прав.


--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
Absinthe
Дата 1.7.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Shogun, обоснуй.
Я говорю, что substr работает с байтами.
Он говорит, что с символами.

P.S. Пока что примеры кода с доказательством были с моей стороны.

Это сообщение отредактировал(а) Absinthe - 1.7.2011, 16:12
PM MAIL   Вверх
MoLeX
Дата 4.7.2011, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Absinthe, все понял про что ты говорил. Пардон)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Shogun
Дата 4.7.2011, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

Репутация: 9
Всего: 11



Цитата(Absinthe @  1.7.2011,  16:11 Найти цитируемый пост)
Я говорю, что substr работает с байтами.
Он говорит, что с символами.

Она не работает с байтами а просто не умеет правильно юзать utf-8 символы которые состоят из 2 байт, поэтому он и принимает эти 2 байта как 2 символа, а в mb_* их обьядиняют в один.

mb_substr ничто иное как более новая версия substr. Раньше для такой работы нужно было юзать substr и остальные функции для работы с текстом в паре с utf8_decode/utf8_encode.


--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
Absinthe
Дата 5.7.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

Она не работает с байтами а просто не умеет правильно юзать utf-8 символы которые состоят из 2 байт, поэтому он и принимает эти 2 байта как 2 символа, а в mb_* их обьядиняют в один.
 Что переводится как "она просто работает с байтами" smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.