PHP在字符串的中间(!)插入省略号?

时间:2009-10-22 21:05:49

标签: php string ellipsis

我正在研究一个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 :(得分:0)

我们确实设法修复它(或者更确切地说,找出了问题)。问题是创建这些帖子的成员之一似乎在Microsoft Word或类似的程序中有写作。您可能都知道,Word会自动将三个点转换为省略号。因此,这些帖子实际上包含了省略号。

将该文本粘贴到论坛中会产生问题,因为preg_replace函数似乎有一些utf-8字符的问题(因为它似乎是一个)。然后,它们似乎并不是唯一的,因为我的补丁也不起作用(也没有修改版本来处理其他preg_replace)。

感谢你,Volker,当你向我指出正确的方向时。