За последние 24 часа нас посетили 16590 программистов и 1649 роботов. Сейчас ищут 2074 программиста ...

Непонятный баг с "длинной" символа

Тема в разделе "PHP и базы данных", создана пользователем RavenS, 23 сен 2008.

  1. RavenS

    RavenS Активный пользователь

    С нами с:
    23 сен 2008
    Сообщения:
    1
    Симпатии:
    0
    Добрый вечер! Пишу простенькую поисковую систему для своего сайта, и столкнулся со следующей проблемой:
    Есть скрипт, который пробегается по всем статьям и индексирует все существующие слова, а также связывает их со статьями, в которых они встречались. Причём в одно из полей записывается положение начала предложения, в котором встречалось это слово.
    Например: "Привет друг. Как дела?". Для слова "привет" и "друг" эта позиция будет 0, а для "как" и "дела" 13 соответственно.

    Есть другой скрипт - клиентский. Который также выполняет поиск, но уже по связям, затем вытаскивает из БД статью, и с некоторой позиции до конца предложения (конец строки или "." или "?") выводит строку.

    Но происходит какой-то баг: для вытащенной в клиентском скрипте статьи позиция "13" это уже совсем не начало слова "Как" в предложении, а чуть раньше.. Получается небольшой сдвиг, и при запросе на "дела" в лучшем случае может вывестить что-то типа "�руг. Как дела?". Как будто в клиентском скрипте на один печатаемый символ выделяется меньше бит.
    При попытке вывести в серверном скрипте первый символ строки $string ( echo $string[0]; ) для "Привет" получаем "П", а в клиентском "�", при этом если вывести строку полностью, результат и там и там будет одинаковым - "Привет".

    Подозреваю, что где-то накосячил с кодировками. Но где и как? Текст везде читабельный.
     
  2. Anonymous

    Anonymous Guest

    На клиентском строка в утф-8. Такие строки нельзя читать побайтно, ибо там не 1 символ кириллицы = 2 байта.