2009-10-22 83 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由多個法語單詞(在這種情況下),和省略號獲取逗號之前和結束引號後面右側添加。這意味着它會在內爆呼叫期間添加,這是毫無意義的。

注意:轉義單詞被照顧。

事實上,只有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)。

感謝你,沃爾克,正如你指出我朝着正確的方向。