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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> После отработки substr появляется символ � 
V
    Опции темы
psworld
Дата 14.7.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.12.2006
Где: Московская област ь

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



Кодировка UTF-8, после подключения к БД выполняется:

Код

    mysql_query ("set character_set_client='utf8'");
    mysql_query ("set character_set_results='utf8'");
    mysql_query ("set collation_connection='utf8_general_ci'");


Получаю данные из БД, далее на php ищу позицию входа некоторой подстроки, вычитаю из этой позиции 1 и обрезаю с помощью substr по данной метке. Иногда в конце обрезанной строки появляется символ �. Если вычитать 2, то пропадает, но появляется для других строк.

Как побороть?

Это сообщение отредактировал(а) psworld - 14.7.2010, 11:16
PM MAIL WWW   Вверх
ksnk
Дата 14.7.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(psworld @  14.7.2010,  11:11 Найти цитируемый пост)
Как побороть?

использовать функции mb_* вместо строковых ?
Для utf-8 должно помочь


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
skyboy
Дата 14.7.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



используй mb_substr

Добавлено через 1 минуту и 59 секунд
упс, слишком долго отправлял smile
utf-8 - кодировка, в которой один символ может кодироваться одним байтом(латиница, цифры) или больше(для кирилицы уже два байта используются).
а substr "режет" не по символам, а по байтам. и у тебя остается только половина полного кода символа. 
PM MAIL   Вверх
smartov
Дата 14.7.2010, 12:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

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



Если не установлено расширение mb можно воспользоваться preg_ фугкциями. Они тоже умеют работать с utf8
PM MAIL   Вверх
NLspieler
Дата 14.7.2010, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(smartov @  14.7.2010,  12:14 Найти цитируемый пост)
Если не установлено расширение mb можно воспользоваться preg_ фугкциями. Они тоже умеют работать с utf8 

Как написать аналог md_substr, который будет работать с любым языком?
PM MAIL   Вверх
skyboy
Дата 14.7.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(NLspieler @  14.7.2010,  16:18 Найти цитируемый пост)
который будет работать с любым языком? 

давай, для начала, ты приведешь код, который при помощи preg_replace обрезает строку, скажем, только на латинице. 
PM MAIL   Вверх
smartov
Дата 15.7.2010, 09:54 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

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



Цитата(NLspieler @  14.7.2010,  17:18 Найти цитируемый пост)

Как написать аналог md_substr, который будет работать с любым языком? 


Код

<?php

function _mb_substr($string, $start, $length = -1) {
    $preg_length = $length > 0 ? "{0,$length}" : '*';
    preg_match(sprintf('/^(.{%d})(.%s)(.*?)$/usD', $start, $preg_length), $string, $matches);
    return $matches[2];
}

var_dump(_mb_substr("С вас, ロイヤ, 5$ за разработку.\nИ даже 10 за поддержку multiline", 12, 27));



Деньги переводите на счет голодных детей Уганды

PM MAIL   Вверх
psworld
Дата 15.7.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.12.2006
Где: Московская област ь

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



Спасибо всем за активность в теме, я пока в процессе экспериментов с различными вариантами smile. Вроде, выход нашел…
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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