string.gsub, string.gsub замена > < аналогом < > |
Здравствуйте, гость ( Вход | Регистрация )
string.gsub, string.gsub замена > < аналогом < > |
20.9.2010, 20:03
Сообщение
#1
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
Ранее такого не делал и возникли проблемы.
У меня лог чата создаётся в формате html и всё это дело идёт на сайт. Так вот в целом то работает, но почему та он хочет использовать string.gsub тольк один раз. Код zamena = (string.gsub(data, "<", "<")) zamena = (string.gsub(data, ">", ">")) AddMessage("<font face=MS Sans Serif>["..nowdate.."] "..nick1.." "..zamena.."</font></i></br>") В данном примере работает строка с >. Помогите и объясните плиз!!! Ещё пробовал делать так Код zamena = (string.gsub(data, "<", "<")) and (string.gsub(data, ">", ">"))
|
|
|
20.9.2010, 20:08
Сообщение
#2
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Наверное, в качестве аргумента при втором вызове нужно указывать zamena, а не data.
А еще лучше так: Код zamena = data:gsub("<", "<"):gsub( ">", ">")
|
|
|
20.9.2010, 20:46
Сообщение
#3
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
Спасибо большое
|
|
|
20.9.2010, 20:54
Сообщение
#4
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Лучше же конечно записать это выражение через одну функцию замены, дабы два раза не пробегать по строке.
Код zamena = data:gsub("[<>]", function(k) return k == "<" and "<" or ">" end)
|
|
|
20.9.2010, 23:16
Сообщение
#5
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Объясните мне, в чём смысл замены одного символа тем же самым символом?
Код (string.gsub(data, "<", "<")) Покажите мне хотя бы одно различие между ними.
|
|
|
21.9.2010, 5:05
Сообщение
#6
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
Не одним и тем-же, а его хтмль-кодом, который форум перевёл обратно в символ – посмотри скриншот из первого поста.
|
|
|
21.9.2010, 11:40
Сообщение
#7
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
Код gsub( "8-\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%-\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "$-\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:-\", "<img src='dckolobok/unsure.bmp.png'>") пробовал подставлять слеш \ вроде нотепад показывает норм но хаб выдаёт ошибку( Всё дело в смайликах у них символы проблемные >.< |
|
|
21.9.2010, 12:00
Сообщение
#8
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Итак, для начала, я думаю, тебе надо прочитать Несколько Слов О Захватах И Регулярных Выражениях. Затем могу предложить такой костыль, который я как-то сделал для скрипта SmilesLimiter:
Код tMagic = { ["%^"] = "%%%^", ["%["] = "%%%[", ["%)"] = "%%%)", ["%("] = "%%%(", ["%+"] = "%%%+", ["%*"] = "%%%*", ["%$"] = "%%%$", ["%?"] = "%%%?", ["%."] = "%%%.", ["%-"] = "%%%-", } function MakeNormMagicCharacters(sData) local sData = string.gsub(sData, "%%", "%%%%") for sFrom, sTo in pairs(tMagic) do sData = string.gsub(sData, sFrom, sTo) end return sData end Применение в твоем случчае: Код gsub( MakeNormMagicCharacters("8-\\"), "<img src='dckolobok/blush2.bmp.png'>"):gsub( MakeNormMagicCharacters("%-\\"), "<img src='dckolobok/wacko.bmp.png'>"):gsub( MakeNormMagicCharacters("$-\\"), "<img src='dckolobok/beee.bmp.png'>"):gsub( MakeNormMagicCharacters("{:-\\"), "<img src='dckolobok/unsure.bmp.png'>") Для справки: в луа символ \ является служебным и для его нормального использования надо писать \\ Двойная кавычка экранируется как \" Либо еще можно использовать метод отсюда, он оптимальнее. Но лучше изучить просто какие символы экранируются и записывать вообще вот так: Код gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>")
|
|
|
21.9.2010, 12:04
Сообщение
#9
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
Огромное спасибо классный форум с классными админами не заставляют долго ждать )))
|
|
|
21.9.2010, 12:07
Сообщение
#10
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Nickolya
Код tMagic = { Вся эта лабуда делается при помощи одного метода:["%^"] = "%%%^", ["%["] = "%%%[", ["%)"] = "%%%)", ["%("] = "%%%(", ["%+"] = "%%%+", ["%*"] = "%%%*", ["%$"] = "%%%$", ["%?"] = "%%%?", ["%."] = "%%%.", ["%-"] = "%%%-", } function MakeNormMagicCharacters(sData) local sData = string.gsub(sData, "%%", "%%%%") for sFrom, sTo in pairs(tMagic) do sData = string.gsub(sData, sFrom, sTo) end return sData end Код :gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1") Об этом я уже писал здесь. |
|
|
21.9.2010, 12:11
Сообщение
#11
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
увы но даже с функцией обработать в смайлик отказывается(((
|
|
|
21.9.2010, 12:15
Сообщение
#12
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
alex82, я просто привел код из очень старого скрипта, для наглядности. Тебе за метод спасибо, сам теперь только им и пользуюсь, тем более я упомянул про него в своем сообщении
foXDEvil, давай сюда код свой, без этого никак. |
|
|
21.9.2010, 12:19
Сообщение
#13
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
Сразу предупреждаю программист из меня ещё тот так что в скрипте вы найдёте кучу и тучу ошибок хД
(скрипт выводит последние 35 сообщений из чата в файлик) Раскрывающийся текст Код LastTenMessages = {} NumberOfMessages = 0 botname = "R[Bot]" logfile= "/home/madnesss/hosts/toa/verlilog/35.html?#34; tMagic = { ["%^"] = "%%%^", ["%["] = "%%%[", ["%)"] = "%%%)", ["%("] = "%%%(", ["%+"] = "%%%+", ["%*"] = "%%%*", ["%$"] = "%%%$", ["%?"] = "%%%?", ["%."] = "%%%.", ["%-"] = "%%%-", } function MakeNormMagicCharacters(sData) local sData = string.gsub(sData, "%%", "%%%%") for sFrom, sTo in pairs(tMagic) do sData = string.gsub(sData, sFrom, sTo) end return sData end function VH_OnParsedMsgChat(nick, data) if (string.find(data, "^[%.%+!]")) then else nick1 = "<<b>"..nick.."</b>>" nick2 = "<b>*"..nick.."</b>" nowdate = os.date("%X") zamena = data:gsub("<", "<"):gsub( ">", ">"):gsub( "/me", ""):gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>") if (string.find(data, "/me")) then AddMessage("<font face=MS Sans Serif>["..nowdate.."] "..nick2.." "..zamena.." </font></i></br>") else AddMessage("<font face=MS Sans Serif>["..nowdate.."] "..nick1.." "..zamena.." </font></i></br>") end end handle = io.open(logfile,"w+") io.output(handle) if (handle) then date = os.date ("*t") io.write("<link rel='stylesheet' href='/templates/system/css/system.css' type='text/css' /><link rel='stylesheet' href='/templates/siteground-j15-154/css/template.css' type='text/css' /><style type'text/css'>body {font-family: Tahoma, Verdana, Arial, sans-serif; line-height: 1.3em; margin: 0; padding: 0; font-size: 11px; color: #424242; background: #efeeee;}</style>") io.write(string.format("")..GetMessages()) io.flush() end return 1 end function AddMessage(message) if (NumberOfMessages == 0) then LastTenMessages[1] = message NumberOfMessages = 1 elseif (NumberOfMessages < 35) then NumberOfMessages = NumberOfMessages + 1 LastTenMessages[NumberOfMessages] = message elseif (NumberOfMessages == 35) then for i = 1, 34, 1 do LastTenMessages[i] = LastTenMessages[i+1] end LastTenMessages[35] = message end end function GetMessages() if (NumberOfMessages == 0) then return "" else TempString = "" for i = 1, NumberOfMessages, 1 do TempString = TempString.." "..LastTenMessages[i] end return TempString end end переделал из истории на верлике
Прикрепленные файлы
|
|
|
21.9.2010, 12:24
Сообщение
#14
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Функция обработки смайлов из StatPX:
Код tSmiles = { ["biggrin.gif"] = {":D", ":-D", ":=D"}, ["blink.gif"] = {"oO", "o.O", "o_O", "оО", "о.О", "о_О"}, ["confused.gif"] = {":S", ":-S", ":=S", ":confused:"}, ["cry.gif"] = {":'(", ":'-(", ":'=(", ":cry:"}, ["lol.gif"] = {":lol:", ":LOL:", "LOL"}, ["sad.gif"] = {":(", ":-(", ":=("}, ["shock.gif"] = {"O.O", "O_O", "О.О", "О_О", ":shock:"}, ["smiley.gif"] = {":)", ":-)", ":=)"}, ["tongue.gif"] = {":P", ":-P", ":=P"}, ["wink.gif"] = {";)", ";-)", ";=)"}, ["woohoo.gif"] = {"8-D", "8=D", ":woohoo:"}, } function string.Smiles(str) for i,v in pairs(tSmiles) do local rep = "<img src=\"smiles/"..i.."\" border=\"0\" alt=\"%1\" />" for _,smile in ipairs(v) do str = str:gsub(smile:gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1"),rep) end end return str end Используется так: Код src=src:Smiles() PS. Изобретать велосипед - на редкость неблагодарное занятие. |
|
|
21.9.2010, 12:32
Сообщение
#15
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Ввиду некой тупости верли (с которой как-то пришлось встретиться) предлагаю вместо
Код zamena = data:gsub("<", "<"):gsub( ">", ">"):gsub( "/me", ""):gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>") попробовать вот такой код: Цитата local zamena = data zamena = string.gsub(zamena, "<", "&*#60;") zamena = string.gsub(zamena, ">", "&*#62;") zamena = string.gsub(zamena, "/me", "") zamena = string.gsub(zamena, "8%-\\", "<img src='dckolobok/blush2.bmp.png'>") zamena = string.gsub(zamena, "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>") zamena = string.gsub(zamena, "%$%-\\", "<img src='dckolobok/beee.bmp.png'>") zamena = string.gsub(zamena, "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>") * надо удалить! |
|
|
21.9.2010, 12:45
Сообщение
#16
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
Ввиду некой тупости верли (с которой как-то пришлось встретиться) предлагаю вместо Код zamena = data:gsub("<", "<"):gsub( ">", ">"):gsub( "/me", ""):gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>") попробовать вот такой код: * надо удалить! всё отлично работает кроме zamena = string.gsub(zamena, "%$%-\\", "<img src='dckolobok/beee.bmp.png'>") не видит его думаю сам утрясу !!! Всем спасибо за потраченное время!! |
|
|
21.9.2010, 13:23
Сообщение
#17
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
А попробуй после
Код local zamena = data ДописатьЦитата zamena = string.gsub(zamena, "&*#36;", "$") zamena = string.gsub(zamena, "&*#124;", "|") *, как и обычно, надо удалить! |
|
|
21.9.2010, 13:32
Сообщение
#18
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
именно этого мне не хватало как обидно что мне мозгов не хватает ((((
|
|
|
4.10.2010, 11:03
Сообщение
#19
|
|
Участник Группа: Пользователи Сообщений: 31 Регистрация: 13.1.2010 Пользователь №: 5 672 Спасибо сказали: 0 раз |
Не хотел флудить создавая новую тему Мне интересно можно ли через меню хаба открыть веб ссылку? Не важно птоха или верлик. Т.е. заходишь на хаб в меню нажимаешь Регистраия и тебя кидает на сайт с формой для регистрации Если такое возможно киньте код Заранее спасибо!
|
|
|
4.10.2010, 11:05
Сообщение
#20
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
нет
|
|
|
|
Сейчас: 27.11.2024, 2:59 |