Список форумов Шадринский форум -> Программирование -> PHP, PERL, HTML, CSS etc -> смайлы для чата, замена текста
Начать новую тему   Ответить на тему   вывод темы на печать

смайлы для чата, замена текста

Автор
Сообщение
Brain
Писатель


Пол: Пол:Муж.
Зарегистрирован: 01.12.2004
Сообщения: 357


Статус: Offline
СообщениеДобавлено: 2008.11.28 12:56.36
Ответить с цитатой
например есть строка:

привет #111# человек #011# как дела? #098#

---------------
как вы уже наверное догадались, #111# #011# #098# - это смайлы,

сами картинки храняться на сервере и имеют имена:
111.gif
011.gif
098.gif

---------------
вопрос:
каким образом используя JavaScript эти лексемы можно заменить на HTML код: <img src = 'путь/файл'>
?
?


начал размышлять в сторону регулярных выражений:

// патерн для смайлов
ptn_s = /\#[0-9]{1,4}\#/g;

// в этом массиве мы храним все смайлы из нашей строки
smilesArray = data.match(ptn_s);

подскажите пожайлуста, как можно закончить мысль с минимальными затратами ресурсов пользователя..
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 13:24.22
Ответить с цитатой
preg_replace есть в пхп. счас в ЖС поищу

Добавлено спустя 5 минут 45 секунд:

хотя конечно такие вещи лучше делать на стороне сервера

Добавлено спустя 20 минут 27 секунд:

ага, есть метод replace

что-то типа того:

var text = "#001# #002#";
var ptn_s = /\#(\d{4})\#/;

text = text.replace(ptn_s, "<img src='images/$1.gif />";

какттотак
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Brain
Писатель


Пол: Пол:Муж.
Зарегистрирован: 01.12.2004
Сообщения: 357


Статус: Offline
СообщениеДобавлено: 2008.11.28 17:55.44
Ответить с цитатой
andy ice спасибо за пример с реплейсом,

почему такие вещи лучше делать на стороне сервера ?

действительно есть положительные моменты?
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 18:04.35
Ответить с цитатой
на сервере ты сам себе хозяин, а на клиенте вообще ничего не можешь
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Brain
Писатель


Пол: Пол:Муж.
Зарегистрирован: 01.12.2004
Сообщения: 357


Статус: Offline
СообщениеДобавлено: 2008.11.28 18:57.39
Ответить с цитатой
andy ice писал(а):
на сервере ты сам себе хозяин, а на клиенте вообще ничего не можешь


полностью согласен!

но ведь смайлы это же визуализация Smile
+ есть однозначно, мы можем хранить на клиенте прокэшированую графику,
поэтому отдавать можем ее оч. быстро, не ожидая загрузки файла

еще + это экономия трафика,
т.е. с сервака меньше байт идет.. *101* - 5 байтов за смайл получается...

а не "<img src = 'путь/файл.gif' border=1>" поболее будет Smile
конечно javascript(a) будет больше на первых парах, но со временем должно окупиться.


поправьте, если гдето ошибаюсь


Последний раз редактировалось: Brain (2008.11.29 00:25.36), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 19:06.19
Ответить с цитатой
Brain писал(а):
прокэшированую графику

какая разница, когда ты делаешь жаваскриптом подмену на урл ресурса или сразу в теле этот ресурс прописан?

Brain писал(а):
т.е. с сервака меньше байт идет.. *101* - 5 байтов за смайл получается
если ты борешься за эти N байт, что мешает написать типа...

<br class="101" />

?
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Brain
Писатель


Пол: Пол:Муж.
Зарегистрирован: 01.12.2004
Сообщения: 357


Статус: Offline
СообщениеДобавлено: 2008.11.28 19:24.04
Ответить с цитатой
andy ice писал(а):

какая разница, когда ты делаешь жаваскриптом подмену на урл ресурса или сразу в теле этот ресурс прописан?


разве ее нет?

в примере не написал, видимо не совсем ясно про какой кэш идет речь...

есть загрузка изображений в память:

var smileImgArray = new Array();

smileImgArray["#101#"] = new Image(ширина, высота);
smileImgArray["#101#"].src = "путь/файл.gif";
....
все смайлы аналогично

если мы используем полный путь http://путь/файл.gif на сервере,

скрипт его с сервера тянет?
а это время...

с джаваскриптом проще:

юзаем вместо пути - smileImgArray["#101#"].src
и графика береться из кэша, т.к. в теле документа графика и пути прописаны





andy ice писал(а):

если ты борешься за эти N байт, что мешает написать типа...

<br class="101" />

?


не совсем ясно о чем идет речь, можно по подробнее?
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 19:32.11
Ответить с цитатой
Brain писал(а):
графика береться из кэша

без разницы, или в теле смайлы или ты их жабой грузишь. это не контролируется программером.

Brain писал(а):
по подробнее


в css например

br {display:block; float:left; width:16px; height:16px; background-repeat:no-repeat;}
.101 { background-image:url('../101.gif'); }
.102 { background-image:url('../102.gif'); }
.103 { background-image:url('../103.gif'); }
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Brain
Писатель


Пол: Пол:Муж.
Зарегистрирован: 01.12.2004
Сообщения: 357


Статус: Offline
СообщениеДобавлено: 2008.11.28 20:15.08
Ответить с цитатой
суть понятна,
нужно взять на вооружение пример с CSS, пригодиться Smile

пара вопросов:

графика подгружается перед использованием <br class = '101'/>?
<br /> - переводит строку, в данном примере тоже переводить будет?


в ширь пошли
это хорошо...


получилось что то вроде:


ptn_s = /\#[0-9]{1,4}\#/g;

smilesArray = data.match(ptn_s);

if (smilesArray != null)
{


for (var n=0; n<smilesArray.length; n++)
{
data = data.replace(smilesArray[n], '<img src = \'' + smilesImgArray[smilesArray[n]].src + '\' border=0>');
}
}

и казалось бы работает - оно вери гуд!, и ошибок вроде не выдает, но кодеры - народ пытливый Smile

дело в том что в массиве smilesArray могут быть повторяющиеся элементы,
из за этого replace может повториться ненужных N раз,
в зависимости от количества этих дубликатов.


не подскажете как удалить повторяющиеся элементы из массива средствами JS?
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 20:17.25
Ответить с цитатой
Brain писал(а):
<br /> - переводит строку, в данном примере тоже переводить будет?

andy ice писал(а):
display:block; float:left
те не будет
Brain писал(а):
что то вроде

НАХ!!!... простите. зачем вообще нужен match???? ВМЕСТО него используй replace, блин
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Brain
Писатель


Пол: Пол:Муж.
Зарегистрирован: 01.12.2004
Сообщения: 357


Статус: Offline
СообщениеДобавлено: 2008.11.28 23:01.52
Ответить с цитатой
andy ice писал(а):
зачем нужен match?


match хранит все смайлы из строки в одном массиве,

без него цикл длиннее получиться, если делать цикл по всем смайлам (их > 50)




твой вариант работает:

andy ice писал(а):


var text = "#001# #002#";
var ptn_s = /\#(\d{4})\#/;

text = text.replace(ptn_s, "<img src='images/$1.gif />";



но у меня пути в пхп переменных, а сам скрипт в js файле, т.е. он не подходит, жаль конечно.. меньше кода

пробывал эту хрень($1) в функцию smilesImgArray["$1"].src засунуть,
предварительно изменив паттерн на var ptn_s = /\(#\d{4}\#)/;

не срастается





Добавлено спустя 49 минут 32 секунды:

Последний вопрос снимается, т.к.

в цикле я в replace уже подставляю строку, а не регулярное выражение, а раз это не регулярка, значит замена происходит только с одним элементом - с первым, из всех одинаковых.

следовательно => все выполняется ровно столько раз, сколько надо!

andy ice, благодарю за содействие в решении данной проблемы.
Посмотреть профиль Отправить личное сообщение
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> PHP, PERL, HTML, CSS etc -> смайлы для чата, замена текста

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы