Question

Je travaille sur un logiciel de forum PHP ( FluxBB ) et un utilisateur a rencontré une erreur plutôt intéressante: - semble-t-il - PHP insère des points de suspension au milieu d’une chaîne.

En raison d'une erreur similaire rencontrée sur le réseau, je me sens obligé de dire que ce code est situé dans une fonction et que $ db est une variable globale.

Voici le code (simplifié):

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

Maintenant, $ unique_words est composé de plusieurs mots français (dans ce cas), et les points de suspension sont ajoutés juste avant la virgule et derrière le guillemet de fermeture . Cela doit signifier qu’il est ajouté lors de l’appel implode, ce qui n’a aucun sens.

REMARQUE: l’échappement des mots est pris en charge.

En fait, seule l'erreur PHP peut être à l'origine de l'erreur, car la requête extraite par le débogueur est enregistrée avant son exécution.

En fait, j'essaie d'apporter un soutien, mais je ne peux pas proposer de solution raisonnable ...

Était-ce utile?

La solution

Nous avons réussi à résoudre le problème (ou plutôt à résoudre le problème). Le problème était qu'un des membres qui a créé ces publications semblait avoir écrit alors dans Microsoft Word ou un programme similaire. Comme vous le savez probablement tous, Word convertit automatiquement trois points en points de suspension. Par conséquent, les messages contenaient réellement les ellipses.

Le fait de coller ce texte dans le forum a créé des problèmes, car la fonction preg_replace semble rencontrer quelques problèmes avec les caractères utf-8 (comme cela semble en être un). Encore une fois, ils ne semblent pas être les seuls, car mon correctif n’a pas fonctionné non plus (et aucune version modifiée pour gérer l’autre preg_replace).

Merci à vous, Volker, car vous m'avez dirigé dans la bonne direction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top