Автор Тема: Замена слова смайликом  (Прочитано 6733 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« : 24 Июля 2003, 22:48:59 »
Подскажите оптимальный алгоритм замены ключевого слова в тексте на определённое изображение.
Всего существует порядка 50 разных ключевых слов, записаных в массив примерно в таком виде:

function Check4Smilies(&$substring)
{
$Table = Array(
   "*88"   => ("smile1.gif"),
      "*один"   => ("smile2.gif")
);

         while(list($key, $prop) = each($Table))
         {
                $substring = str_replace($key, " \\"".$key."\\" ", $substring);
         };
unset($Table);
}

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« Ответ #1 : 24 Июля 2003, 22:50:38 »
Данный алгоритм работает очень медленно.

Оффлайн nagash

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 341
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.nagash.org
Замена слова смайликом
« Ответ #2 : 24 Июля 2003, 23:10:43 »
$code = array("=)", ":)");
$smile= array("cool.gif", "yep.gif");
$text = str_replace($code, $smile, $text);

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« Ответ #3 : 24 Июля 2003, 23:41:12 »
А как быть с  \\"".$key."\\"
не вписывать же для каждого смайла в ручную

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Замена слова смайликом
« Ответ #4 : 25 Июля 2003, 02:32:27 »
ZMeY
ну если ты такой ленивый то

function _i($prop$key) {
 return 
"<IMG SRC=\\"smilies/".$prop."\\" ALT=\\"".$key."\\">";
}
$smiles = array(":)"=>_i("smile.gif",":)"), ....);
$text str_replace(array_keys($smiles), array_values($smiles),$text);
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« Ответ #5 : 27 Августа 2003, 23:16:47 »
А как обойтись с регистром, хотелось, бы что бы функция на него не обращала внимания :(

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Замена слова смайликом
« Ответ #6 : 27 Августа 2003, 23:41:34 »
nagash
[p]str_ireplace[/p]
Цитировать
no version information, might be only in CVS
сомневаюсь что его хостер CVS-версией пользуется

ZMeY
под [p]preg_replace[/p] переписывать с использование модификатора i
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Замена слова смайликом
« Ответ #7 : 28 Августа 2003, 10:56:18 »
Цитировать
Макс:
ну если ты такой ленивый то

Цитировать
Макс:
Из комбинации лени и логики получаются программисты!

[OFF]:^)[/OFF]
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« Ответ #8 : 18 Сентября 2003, 16:50:33 »
Спасибо, я остановился на варианте Макса.

А каким образом можно ограничить количество замен, скажем семью, ведь такой скрипт - потенциально уязвим для флуда!

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Замена слова смайликом
« Ответ #9 : 18 Сентября 2003, 21:31:33 »
ZMeY
> А каким образом можно ограничить количество замен
а если повнимательнее почитать мануал ([p]preg_replace[/p]) ?
(см. четвертый параметр)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« Ответ #10 : 19 Сентября 2003, 15:21:00 »
В коде

function _i($prop, $key)
{
return " \\"".$key."\\" ";
}

$smiles = array(    "\\*:)" => _i("smile","*:)"),
                    "\\*;)" => _i("wink","*;)")
);

function Check4Smilies(&$substring, $SmTable)
{
$substring = preg_replace(array_keys($SmTable), array_values($SmTable),$substring,7);
}

Check4Smilies($M, $smiles);
unset($smiles);
?>

Возникает ошибка чтото в виде "Delimiter must.." и.т.д.
В чём проблема?

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« Ответ #11 : 19 Сентября 2003, 15:22:40 »
там где рожи на самом деле смайлы двоеточие-скобка и точка с запятой-скобка

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Замена слова смайликом
« Ответ #12 : 19 Сентября 2003, 16:51:42 »
1. править => отключить иконки в данном сообщении (это отключение смайликов)
2. полный текст ошибки какой ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Замена слова смайликом
« Ответ #13 : 19 Сентября 2003, 17:25:37 »
Я немного ошибся в коде, он выглядит так:

function _i($prop, $key)
{
return " \\"".$key."\\" ";
}

$smiles = array(    "\\*:)" => _i("smile","*:)"),
                    "\\*;)" => _i("wink","*;)")
);

function Check4Smilies(&$substring, $SmTable)
{
$substring = preg_replace(array_keys($SmTable), array_values($SmTable),$substring,7); // это и естиь 13 строка
}

Check4Smilies($M, $smiles);
unset($smiles);
?>

А ошибка такая:
Delimiter must not be alphanumeric or backslash in c:\\http\\home\\localhost\\www\\lib\\smilies.lib.php on line 13

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Замена слова смайликом
« Ответ #14 : 19 Сентября 2003, 18:27:38 »
лень проверять, наверное ошибка здесь:
$smiles = array( "\\*:)" => _i("smile","*:)"),
"/\\*;)/" => _i("wink","*;)")
);
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28