Вверх ↑
Этот топик читают: Гость
Ответов: 92
Рейтинг: 0
#1: 2016-02-26 22:03:44 ЛС | профиль | цитата
Привет, для работы с доменами национальных алфавитов (например домен.рф) нужно сначало их перевести в Punycode (XN--D1ACUFC.XN--P1AI), было бы полезно добавить этот вариант конвертации в стандартный конвертер или сделать отдельный.

О Punycode - https://ru.wikipedia.org/wiki/Punycode

Реализация на пыхе - http://artkiev.com/blog/php-punycode-convert.htm



карма: 0

0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26066
Рейтинг: 2120
#2: 2016-02-26 22:50:32 ЛС | профиль | цитата
theSever писал(а):
было бы полезно добавить этот вариант конвертации в стандартный конвертер или сделать отдельный.

Вот если кто найдет код на Delphi или Паскале, вот тогда можно будет и подумать о добавлении.
карма: 22

0
Ответов: 92
Рейтинг: 0
#3: 2016-02-26 23:06:10 ЛС | профиль | цитата
nesco писал(а):
Вот если кто найдет код на Delphi или Паскале, вот тогда можно будет и подумать о добавлении.


Delphi
Вроде он - http://www.torry.net/vcl/internet/coding/puny.zip

http://delphimaster.net/view/15-1339488214 писал(а):
собственно вот модуль-конвертер для делфи

------------ Дoбавленo в 23.06:
Так же вот - http://programm-school.ru/punycode_unit_for_delphi.html
карма: 0

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#4: 2016-02-26 23:27:48 ЛС | профиль | цитата
А теперь второй вопрос -- зачем это надо, если все современные браузеры поддерживают кириллические домены и им не нужна перекодировка?
карма: 22

0
Ответов: 92
Рейтинг: 0
#5: 2016-02-26 23:46:57 ЛС | профиль | цитата
nesco писал(а):
А теперь второй вопрос -- зачем это надо, если все современные браузеры поддерживают кириллические домены и им не нужна перекодировка?


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

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

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#6: 2016-02-27 00:55:20 ЛС | профиль | цитата
Ну, не знаю. Вот рабочий прототип, но че-то он дофига весит. Я пока не буду его вставлять в компонент. Посмотрим, что скажет сообщество -- projevt_punycode.sha
карма: 22

2
файлы: 1projevt_punycode.sha [15.9KB] [791]
Голосовали:theSever, Konst
Ответов: 92
Рейтинг: 0
#7: 2016-02-27 01:09:06 ЛС | профиль | цитата
nesco писал(а):
у, не знаю. Вот рабочий прототип, но че-то он дофига весит. Я пока не буду его вставлять в компонент. Посмотрим, что скажет сообщество -- projevt_punycode.sha

Большое спасибо) Главное чтобы он был, кому приспичит тот и на форуме откопает.
карма: 0

0
Ответов: 537
Рейтинг: 14
#8: 2020-03-18 10:05:13 ЛС | профиль | цитата
Хороший конвертер, только есть некоторые недоработки, если например нужно проверить много сайтов и среди них есть и кириллический домен, то конвертер отрабатывает только на кириллических доменах, а с других делает непонятно что, общем видно все в схеме, инструмент нужный
https://forum.hiasm.com/getfile/38923
В другом направлении тоже самое

Редактировалось 4 раз(а), последний 2020-03-18 11:12:26
карма: 4

0
Ответов: 537
Рейтинг: 14
#9: 2020-03-18 20:56:27 ЛС | профиль | цитата
nesco посмотрите схему, мне нужно было проверить заголовки сайтов многих, доделал как мог кубиками

--- Добавлено в 2020-03-18 21:02:57

Ели что и так хорошо что есть. Кому нужно может, нужно было быстро перекодировать текст с юникода на читабельный, код любой, не пригодился переводчик, мож кому надо
Add(MainForm,2953706,189,154)
{
}
Add(ChildPanelEx,7223413,259,154)
{
}
BEGIN_SDK
Add(EditMultiEx,6857113,21,21)
{
WorkCount=#34:doCompare=Перевести юникод в текст|
EventCount=#44:onReplace=Текст на иврите сделан для таблицы|25:onEvent1=Обновить браузер|
VarCount=#38:FString=Текст для добавления в таблицу|
Width=1168
Height=1019
link(doCompare,11800378:doCompare,[(73,27)(73,174)])
}
Add(Panel,14126488,287,49)
{
Left=770
Top=135
Width=743
Height=639
}
Add(WebBrowser,13474582,196,56)
{
Width=816
Height=782
URL=""
Silent=0
Point(PHandle)
}
Add(VisualStrings,13619324,133,56)
{
Lines=#40:https://www.branah.com/unicode-converter|
Point(doText)
Point(onText)
link(onText,13474582:doNavigate,[])
}
Add(InlineCode,8878240,266,231)
{
WorkPoints=#6:Parsel|
EventPoints=#7:CurText|
DataPoints=#2:ph|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|40:uses kol,Share,Debug,ActiveX,KOLSHDocVw;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|17: ph:THI_Event;|22: CurText:THI_Event;|0:|47: procedure Parsel(var dt:TData; index:word);|0:|5: end;|0:|14:implementation|0:|4:type|31: TKOLWebBrowser = PWebBrowser;|31: PKOLWebBrowser = PWebBrowser;|0:|29:procedure THiAsmClass.Parsel;|16:var pc:PControl;|15: txt:string;|5:begin|36: pc := PControl(ToIntegerEvent(ph));|97: txt := PKOLWebBrowser(pc).OleObject.Document.getElementsByTagName('textarea').Item(0).outerHTML;|26: _hi_OnEvent(CurText,txt);|4:end;|0:|4:end.|
link(CurText,1634674:doSearch,[])
link(ph,14140322:Var3,[(272,166)])
}
Add(InlineCode,6429650,210,189)
{
WorkPoints=#3:Zap|
DataPoints=#1:h|4:text|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|61:uses kol,Share,Debug,windows,ActiveX,KOLSHDocVw,Win,ShellApi;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|16: wb:PControl;|9: public|16: h:THI_Event;|19: text:THI_Event;|4: |46: procedure Zap(var Data:TData; index:word);|4: |5: end;|0:|15:implementation |0:|4:type|32: PKOLWebBrowser = PWebBrowser; |0:|26:procedure THiAsmClass.Zap;|5:begin|35: wb := PControl(ToIntegerEvent(h));|110: PKOLWebBrowser(WB).OleObject.Document.getElementsByTagName('textarea').item(1).value := ToStringEvent (text);|74: PKOLWebBrowser(WB).OleObject.Document.getElementById('btnunicode').Click;|5: end;|0:|4:end.|
link(h,14140322:Var2,[])
link(text,3855309:Value,[])
}
Add(Timer,12612128,210,231)
{
Interval=100
Enable=1
AutoStop=1
link(onTimer,8878240:Parsel,[])
}
Add(Hub,7768016,175,175)
{
OutCount=4
link(onEvent1,12973492:In,[(238,181)(238,195)])
link(onEvent2,2909122:In,[])
link(onEvent3,6429650:Zap,[])
link(onEvent4,12612128:doTimer,[(199,202)(199,237)])
}
Add(BlockFind,1634674,315,231)
{
IncludeBlock=1
StartBlock=">"
EndBlock="<"
link(onSearch,14330467:doEvent1,[])
}
Add(InlineCode,1735655,392,238)
{
@Hint=#45:Замена любых неотображаемых знаков на пробелы|
WorkPoints=#2:go|
EventPoints=#7:CurText|
DataPoints=#4:text|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|18: text:THI_Event;|21: CurText:THI_Event;|3: |44: procedure go(var Data:TData; index:word);|3: |5: end;|0:|14:implementation|0:|25:procedure THiAsmClass.go;|3:var|11: S:String;|17: i, Len:Integer;|5:begin|28: S :=(ToStringEvent(text));|18: Len :=Length(S);|27: for i :=1 to Len do begin|35: if S[i] < #32 then S[i] := '|';|6: end;|23:_hi_OnEvent(CurText,S);|4:end;|4:end.|
link(CurText,13455297:doTrim,[])
link(text,5641920:GetData,[])
}
Add(Hub,14330467,364,231)
{
OutCount=4
link(onEvent1,5641920:doData,[(385,237)(385,202)])
link(onEvent2,1735655:go,[])
link(onEvent4,8501118:doEnum,[(389,258)(389,293)])
}
Add(EventFromData,5641920,392,196)
{
}
Add(GetDataEx,14140322,210,161)
{
link(Data,13474582:PHandle,[])
}
Add(StrList,12568012,525,217)
{
Point(onGetString)
Point(doGetString)
}
Add(Timer,6713686,42,56)
{
AutoStop=3
link(onTimer,3671370:doEvent1,[])
}
Add(StrMask,11800378,126,168)
{
Mask="*textarea*"
link(onFalse,3671370:doEvent2,[(170,174)(170,111)(88,111)(88,69)])
link(onTrue,7768016:doEvent1,[])
link(Str,13474582:Page,[(132,156)(209,156)])
}
Add(Memory,16549056,812,294)
{
}
Add(LineBreak,7918026,770,301)
{
link(Out,16549056:doClear,[])
Primary=[12973492,-483,-112]
}
Add(Memory,3855309,217,119)
{
}
Add(ArrayEnum,8501118,539,287)
{
link(onItem,10653166:doCompare,[(587,293)(587,244)])
link(onEndEnum,1347724:doReplace,[])
link(Array,12568012:Array,[])
}
Add(MultiElementEx,10653166,595,238)
{
link(onReplace,2281603:doAdd,[])
}
BEGIN_SDK
Add(EditMultiEx,2119631,21,21)
{
WorkCount=#23:doCompare=Фильтр текста|
EventCount=#15:onReplace=Текст|
Width=440
link(doCompare,12808632:doCompare,[(35,27)(35,55)])
}
Add(StrMask,12808632,49,49)
{
Mask="*http*"
link(onFalse,7359480:doCompare,[])
}
Add(StrMask,7359480,98,49)
{
Mask="*i*"
link(onFalse,4220204:doCompare,[])
}
Add(StrMask,4220204,147,49)
{
Mask="*a*"
link(onFalse,7463152:doCompare,[])
}
Add(StrMask,7463152,196,49)
{
Mask="*e*"
link(onFalse,2483990:doCompare,[])
}
Add(Replace,479387,294,49)
{
SubStr=";"
link(onReplace,2119631:onReplace,[(394,55)(394,27)])
}
Add(StrMask,2483990,245,49)
{
Mask="*o*"
link(onFalse,479387:doReplace,[])
}
END_SDK
Add(Replace,3139886,476,238)
{
SubStr="|"
DestStr="\r\n"
link(onReplace,12568012:doText,[])
}
Add(Trim,13455297,434,238)
{
Char="|"
link(onTrim,3139886:doReplace,[])
}
Add(StrList,2281603,679,238)
{
}
Add(Replace,1347724,679,294)
{
SubStr="\r\n"
DestStr=", "
link(onReplace,6055412:doTrim,[])
link(Str,2281603:Text,[])
}
Add(LineBreak,11706945,637,245)
{
link(Out,2281603:doClear,[])
Primary=[2909122,-385,-63]
}
Add(Trim,6055412,728,294)
{
Mode=7
link(onTrim,16549056:doValue,[])
}
Add(Hub,3671370,98,56)
{
InCount=2
OutCount=1
link(onEvent1,13619324:doText,[])
}
END_SDK

Разберетесь кому нужно, работает мгновенно

Редактировалось 2 раз(а), последний 2020-03-18 21:06:52
карма: 4

0
Ответов: 16884
Рейтинг: 1239
#10: 2020-03-18 22:11:54 ЛС | профиль | цитата
Никто не знает, почему меня тянет на мат при виде вот такого
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 2200
Рейтинг: 673
#11: 2020-03-18 22:21:34 ЛС | профиль | цитата
Tad, это от того что Sersey пихает EventFromData туда где он нафиг не нужен, хотя скорее всего знает, что так не надо делать. А так как Sersey от вас далеко и вы не можете ударить его или запустить в него чем нибудь, то вас тянет выразить свое негодование матом.
карма: 11

0
Ответов: 537
Рейтинг: 14
#12: 2020-03-29 03:43:06 ЛС | профиль | цитата
Tad писал(а):
Никто не знает, почему меня тянет на мат при виде вот такого

А вы внимательней посмотрите и увидите что данные в моем IC можно получить только через верхнюю точку, также обратите внимание, что я писал нужно было когда то, может давным давно и сейчас схемы строю по другому. К тому же если посмотреть на код EventFromData, он проще и меньше Memory и я его использую без всяких штампов где учили, что только Memory может здесь использоваться. Tad вы может и знаток, только я всегда испытываю все сам и мнения у меня свои, вот по штампам не такой как все. Сам проверил, выучил, узнал, нашел, а если в вас вставили тему, что этот компонент можно только так использовать и ни как иначе, то это ваши проблем. Если когда сказали что это красное, так сказали учить, голова запоминает и если оно станет к примеру зеленое, вы будете думать и верить что оно красное, во преки всем кто по другому первый раз посмотрел. И схемку эту дал просто, мож пригодится, писал совсем в не трезвом состоянии. Делал когда то, подумал вдруг надо кому пригодится.

Редактировалось 4 раз(а), последний 2020-03-29 03:57:10
карма: 4

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#13: 2020-03-29 12:50:06 ЛС | профиль | цитата
Sersey писал(а):
К тому же если посмотреть на код EventFromData, он проще и меньше Memory

Интересно, с чего бы это?

Код EventFromData для нужных методов:
procedure THIEventFromData._work_doData;
var ldt:TData;
begin
ldt := ReadMTData(_Data,_data_Data);
FreeData(@dt);
CopyData(@dt,@ldt);
end;

procedure THIEventFromData._var_GetData;
begin
_hi_OnEvent(_event_onEvent,_Data);
_data := dt;
end;

Код Memory для нужных методов:
procedure THIMemory._work_doValue;
begin
FData := ReadData(_Data,_data_Data);
_hi_CreateEvent(_Data,@_event_onData,FData);
end;

procedure THIMemory._var_Value;
begin
_Data := FData;
end;

Неподключенные методы не компилируются в код, это для справки, вдруг не знал. В EventFromData еще и перенос MT-данных есть из одной переменной в другую. Тут вообще тогда можно спокойно и вот так делать
Схема

Add(MainForm,2953706,126,210)
{
link(onCreate,2015505:doEvent1,[])
}
Add(MT_MultiMem,1337295,280,224)
{
@Hint=#42:А почему бы тогда не использовать вот это?|
Count=1
AddHint(46,-30,198,26,@Hint)
}
Add(VisualStrings,16177934,231,224)
{
Lines=#4:test|
Point(doText)
Point(onText)
link(onText,1337295:doValue,[])
}
Add(DoData,10361688,280,287)
{
link(onEventData,11032468:doText,[])
link(Data,1337295:Value1,[])
}
Add(Hub,2015505,189,224)
{
link(onEvent1,16177934:doText,[])
link(onEvent2,10361688:doData,[(221,237)(221,293)])
}
Add(Label,11032468,350,287)
{
Left=15
Top=15
}

Но почему-то никто не делает. Да, кода немного больше, но ведь работает же

Редактировалось 3 раз(а), последний 2020-03-29 12:54:57
карма: 22

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)