Domanda

Sto lavorando a un software per forum PHP ( FluxBB ) e un utente ha riscontrato un errore piuttosto interessante, che - così sembra - PHP sta inserendo un'ellissi nel mezzo di una stringa.

A causa di un errore simile che ho riscontrato in rete, mi sento costretto a dire che questo codice si trova in una funzione e che $ db è una variabile globale.

Ecco il codice (semplificato):

// 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];

Ora $ unique_words è composto da più parole francesi (in questo caso) e i puntini di sospensione vengono aggiunti subito prima della virgola e dietro la virgoletta di chiusura . Ciò significa che viene aggiunto durante la chiamata di implosione, il che non ha alcun senso.

NOTA: si evita l'escaping delle parole.

In effetti, solo PHP può causare l'errore, poiché la query che viene espulsa dal debugger viene salvata prima di essere eseguita.

In realtà sto cercando di fornire supporto, ma non riesco a trovare una soluzione ragionevole ...

È stato utile?

Soluzione

Siamo effettivamente riusciti a risolverlo (o meglio, abbiamo capito il problema). Il problema era che uno dei membri che ha creato questi post sembrava aver scritto in Microsoft Word o un programma simile. Come probabilmente tutti sapete, Word converte automaticamente tre punti in ellissi. Pertanto, i post contenevano effettivamente le ellissi.

Incollare quel testo nel forum ha creato problemi, perché la funzione preg_replace sembra avere alcuni problemi con i caratteri utf-8 (dato che sembra essere uno). D'altra parte, non sembrano essere i soli, poiché neanche la mia patch ha funzionato (e nemmeno una versione modificata per gestire l'altro preg_replace).

Grazie a te, Volker, mentre mi hai indicato nella giusta direzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top