PHP ortasında üç nokta ekleme (!) Bir dize?

1 Cevap php

Ben bir PHP forum yazılımı üzerinde çalışıyorum (FluxBB) ve bir kullanıcı oldukça ilginç bir hatayla karşılaştı, o - öyle görünüyor - PHP bir dize ortasında üç nokta ekleme olduğunu.

Nedeniyle benzer bir hata Ben bu kod bir işlevi bulunmaktadır söylemek zorunda hissediyorum net ve $db global bir değişken olduğunu buldu.

İşte (basitleştirilmiş) kodu bulunuyor:

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

Şimdi, $unique_words (bu durumda), birden çok Fransızca kelime oluşur, ve üç nokta eklendi alır right before the comma and behind the closing quote. İşte bu hiç mantıklı implode görüşme sırasında eklenir demek gerekir.

NOT: kelimeleri kaçan halledilir.

Hata ayıklayıcı tarafından dışarı tükürmek sorgu idam edilmeden önce kaydedilmiş beri Aslında, sadece PHP, hataya neden olabilir.

Aslında destek vermeye çalışıyorum, ama ben makul bir çözüm ile gelip olamaz ...

1 Cevap

Biz aslında (ya da daha doğrusu sorunu anladım) bunu düzeltmek için başardı. Sorun bu mesaj oluşturulan üyelerinden biri Microsoft Word veya benzeri bir programdan sonra writtem var gibiydi oldu. Muhtemelen hepinizin bildiği gibi, Word otomatik olarak bir üç nokta üç nokta dönüştürür. Bu nedenle, mesaj aslında elipsleri içeriyordu.

(Bu bir gibi görünüyor) preg_replace fonksiyonu utf-8 karakterler ile bazı sorunlar var gibi görünüyor, çünkü, forum oluşturulan sorunların içine metin yapıştırırken. Sonra tekrar, benim yama da işe yaramadı çünkü onlar, sadece onlar gibi görünmüyor (ve diğer preg_replace işlemek için modifiye edilmiş bir versiyonu ne yaptı).

Senin sayende, Volker, sen bana doğru yönde işaret gibi.