質問

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人がMicrosoft Wordまたは同様のプログラムで書き込みを行ったように見えることでした。おそらくご存知のとおり、Wordは3つのドットを省略記号に自動的に変換します。したがって、投稿には実際に楕円が含まれていました。

そのテキストをフォーラムに貼り付けると問題が発生しました。これは、preg_replace関数にutf-8文字に関する問題があるように見えるためです(そのように思われます)。繰り返しますが、私のパッチも機能しなかったため(また、他のpreg_replaceを処理するための修正バージョンもしなかったため)、それらは唯一のものではないようです。

正しい方向に私を指摘してくれた、フォルカー、ありがとう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top