PHP يقوم بإدراج علامات الحذف في منتصف (!) السلسلة؟

StackOverflow https://stackoverflow.com/questions/1609945

  •  05-07-2019
  •  | 
  •  

سؤال

أنا أعمل على برنامج منتدى 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 فقط هو الذي يمكن أن يسبب الخطأ، حيث يتم حفظ الاستعلام الذي يتم صياغته بواسطة مصحح الأخطاء قبل تنفيذه.

في الواقع، أحاول تقديم الدعم، لكن لا يمكنني التوصل إلى حل معقول.

هل كانت مفيدة؟

المحلول

لقد تمكنا بالفعل من إصلاحه (أو بالأحرى، اكتشفنا المشكلة).كانت المشكلة أن أحد الأعضاء الذين أنشأوا هذه المشاركات يبدو أنه قد كتبها في برنامج Microsoft Word أو برنامج مشابه.كما تعلمون جميعًا، يقوم Word بتحويل ثلاث نقاط إلى علامة حذف تلقائيًا.لذلك ، احتوت المنشورات بالفعل على القطع.

أدى لصق هذا النص في المنتدى إلى حدوث مشكلات، لأنه يبدو أن وظيفة preg_replace بها بعض المشكلات مع أحرف utf-8 (حيث يبدو أنها واحدة).ومرة أخرى، لا يبدو أنهم الوحيدون، نظرًا لأن التصحيح الخاص بي لم يعمل أيضًا (وكذلك الإصدار المعدل للتعامل مع preg_replace الآخر).

شكرًا لك يا فولكر، لأنك وجهتني في الاتجاه الصحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top