2009-10-22 2 views
0

Я работаю над программным обеспечением PHP-форума (FluxBB), и пользователь столкнулся с довольно интересной ошибкой, так что, похоже, PHP вставляет многоточие в середине строки.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 состоит из нескольких французских слов (в данном случае), а многоточие добавляется прямо перед запятой и за закрывающей кавычки. Это должно означать, что он добавляется во время вызова implode, что не имеет никакого смысла.

ПРИМЕЧАНИЕ: Уход за словами позаботился.

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

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

+1

Можете ли вы предоставить примерные данные для '$ words ['add'] ['post']' и '$ words ['add'] ['subject']', чтобы мы могли воспроизвести поведение? Вывод 'var_export ($ words ['add'])' был бы приятным. – VolkerK

+0

Я не могу, хотя я мог бы попросить их. См. Следующий ответ для примера запроса. Вы можете получить дополнительную информацию в оригинальной теме здесь: http://fluxbb.org/forums/post/26036/#p26036 (Как я уже сказал, я просто передаю это, потому что это один из самых странных ошибки, с которыми я столкнулся) – Franz

+0

И да, я имел в виду многоточие. – Franz

ответ

0

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

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

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