Сохранить регистр при использовании str_ireplace? - PullRequest
1 голос
/ 22 января 2010

Я создаю поиск, который обернет искомый текст тегом <span>, и у меня работает этот код ОК:

str_ireplace($q,'<span>'.$q.'</span>',$row[name]);

Проблема в том, что если пользователь ищет Tom, то он покажет Tom, что круто, но если они введут tom из-за str_ireplace, он покажет tom, имеет ли это смысл ? Реальная проблема заключается в том, что если кто-то введет tOm aRnFeLd, хотя он будет искать OK, эстетика будет отображаться на странице tOm aRnFeLd

Как мне сохранить заглавные и строчные буквы обеих строк? Есть ли лучший способ обернуть нечувствительный к регистру текст из строки?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2012

используйте stristr для извлечения иглы из стога сена, без учета регистра

$keyword_caseRetained_all = stristr($excerpt, $keyword);

но это возвращает иглу и остальную часть стога сена, так что вы должны использовать substr, чтобы сохранить только часть иглы. начать с позиции 0, набери длину ключевого слова

$keyword_caseRetained = substr($keyword_caseRetained_all, 0, strlen($keyword) );

теперь используйте эту переменную внутри функции str_ireplace

$excerpt = str_ireplace($keyword, '<em>'.$keyword_caseRetained.'</em>', $excerpt);

как только вы это узнаете, вы можете объединить строки 1 и 2 в хорошем крысином гнезде, чтобы сократить ваш код.

или добавьте это как метод к классу манипулирования строками.

0 голосов
/ 22 января 2010
  1. Получить длину фразы strlen ()
  2. Найти вхождение фразы с помощью stripos ()
  3. Вставить в текст <span> после символа N текста (где N - результат из пункта # 2)
  4. Вставить в текст </span> после символа N + M текста (где N - результат из точки # 2, а M - из точки # 1)
  5. Продолжить пункты 2-4 (Используя третий параметр strpos () - смещение )
...