PHP вставляет многоточие в середине (!) Строки? - PullRequest
0 голосов
/ 23 октября 2009

Я работаю над программным обеспечением для форума PHP ( FluxBB ), и пользователь столкнулся с довольно интересной ошибкой, которая, как кажется - PHP вставляет многоточие в середину строки.

Из-за схожей ошибки, которую я обнаружил в сети, я вынужден сказать, что этот код находится в функции и что $db является глобальной переменной.

Вот (упрощенный) код:

// Get unique words from the above arrays
$unique_words = array_unique(array_merge($words['add']['post'], $words['add']['subject']));

if (!empty($unique_words))
{
    $result = $db->query('SELECT id, word FROM '.$db->prefix.'search_words WHERE word IN('.implode(',', preg_replace('#^(.*)$#', '\'\1\'', $unique_words)).')', true) or error('Unable to fetch search index words', __FILE__, __LINE__, $db->error());

    $word_ids = array();
    while ($row = $db->fetch_row($result))
        $word_ids[$row[1]] = $row[0];

Теперь $unique_words состоит из нескольких французских слов (в данном случае), и многоточие добавляется прямо перед запятой и за закрывающей кавычкой . Это должно означать, что он добавляется во время вызова взрыва, что не имеет никакого смысла.

ПРИМЕЧАНИЕ. Об удалении слов позаботятся.

Фактически, только PHP может быть причиной ошибки, так как запрос, выдаваемый отладчиком, сохраняется перед выполнением.

Я на самом деле пытаюсь оказать поддержку, но не могу найти разумного решения ...

1 Ответ

0 голосов
/ 23 октября 2009

Нам действительно удалось это исправить (точнее, выяснили проблему). Проблема заключалась в том, что один из участников, создавших эти посты, имел письменный текст в Microsoft Word или аналогичной программе. Как вы, наверное, все знаете, Word автоматически преобразует три точки в многоточие. Таким образом, сообщения фактически содержали эллипсы.

Вставка этого текста в форум создала проблемы, потому что у функции preg_replace, кажется, есть некоторые проблемы с символами utf-8 (как это кажется). С другой стороны, они, похоже, не единственные, так как мой патч тоже не работал (как и измененная версия для обработки другого preg_replace).

Спасибо тебе, Фолькер, когда ты указал мне правильное направление.

...