Forum Webscript.Ru
Программирование => PHP => Тема начата: ZMeY от 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, "
", $substring);
};
unset($Table);
}
-
Данный алгоритм работает очень медленно.
-
$code = array("=)", ":)");
$smile= array("cool.gif", "yep.gif");
$text = str_replace($code, $smile, $text);
-
А как быть с

не вписывать же для каждого смайла в ручную
-
ZMeY
ну если ты такой ленивый то
function _i($prop, $key) {
return "
";
}
$smiles = array(":)"=>_i("smile.gif",":)"), ....);
$text = str_replace(array_keys($smiles), array_values($smiles),$text);
-
А как обойтись с регистром, хотелось, бы что бы функция на него не обращала внимания :(
-
nagash
[p]str_ireplace[/p]
no version information, might be only in CVS
сомневаюсь что его хостер CVS-версией пользуется
ZMeY
под [p]preg_replace[/p] переписывать с использование модификатора i
-
Макс:
ну если ты такой ленивый то
Макс:
Из комбинации лени и логики получаются программисты!
[OFF]:^)[/OFF]
-
Спасибо, я остановился на варианте Макса.
А каким образом можно ограничить количество замен, скажем семью, ведь такой скрипт - потенциально уязвим для флуда!
-
ZMeY
> А каким образом можно ограничить количество замен
а если повнимательнее почитать мануал ([p]preg_replace[/p]) ?
(см. четвертый параметр)
-
В коде
function _i($prop, $key)
{
return "
";
}
$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.." и.т.д.
В чём проблема?
-
там где рожи на самом деле смайлы двоеточие-скобка и точка с запятой-скобка
-
1. править => отключить иконки в данном сообщении (это отключение смайликов)
2. полный текст ошибки какой ?
-
Я немного ошибся в коде, он выглядит так:
function _i($prop, $key)
{
return "
";
}
$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
-
лень проверять, наверное ошибка здесь:
$smiles = array( "\\*:)" => _i("smile","*:)"),
"/\\*;)/" => _i("wink","*;)")
);
-
Тогда получаем ошибку:
Warning: Compilation failed: unmatched parentheses at offset 3 in c:\\http\\home\\localhost\\www\\lib\\smilies.lib.php on line 13