Re: Umlaute in E-Mail Adressen kodieren (IDNA)
Verfasst: 17.05.2016 14:07
nö hab ich nicht. meine vorhin gestellte frage wurde schon beantwortet.
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Code: Alles auswählen
CompilerIf #PB_Compiler_Unicode
CompilerError "Nur im ASCIIModus entpacken!"
CompilerEndIf
UseLZMAPacker()
lib.s = "XQAAAAEAEI8IqBly13UfTQKW4cLqw12n6GhsbDk9RAYsuB1xHd/xVMMxTigRfW+Ts8xg0sTXmety1bhZzSfsLCO4V6GrkTwUGDCT4DlbCOpFQ4rff7ijlpQUtiMjyECHWRaQAMBZI1hxVuXzbOM9Lnunl56"
lib.s + "11mSEKajQHqyUSBV3kmsq10U7/Wf7Zq9KNMlT9C1QA2yIVQo6uCt5CjSPvfwOexAwaPu/nb/kADwgSQz7Hq3/fEfIRDsTWp+smSOhMFwIs3gcY+g2GzgQ2SBYpYJ303NSq3hg9YaZvp/lUbkH7rT1xLJDRNwjACP"
lib.s + "M54npW5o4cDirADSijSRmAPOrfMVp5xmUnPNbus5cnv5HFxdd5k52MSH1ySCI0Yb5ki3ULsQIfPzJpVr1UbpSLWWiUrMoD/B7whpO6Erhy1YTw6GKHxmwfqKLMDwTviS+pj8efleJtDHB33ovrH+kKkgL5I9/gEc"
lib.s + "o68ku00kO9+HgBc4Qm8mfh6r7JtH5fpUSUvNlnjuugCV9L9dSF/Sbj7GqzonVlQpzftRuqJcH2LhSbEdiU7fO4LsKESHRe6Sufa9WNw/Nb+r6s+Va6oBcYa+XUI38g9FYn+SfheOtQVDSmuHHbnmzO/o7EEe5hCH"
lib.s + "6J9pm6drXv4EhzKeKoScjSvmgpF+8W5M1kx9TZKWw2mIdMp3tFVrQsUh8Xo3ItxVkuBmMNmuVw27vquER9Qg/rR1AagI0FQNxE/VKc7JdFcbmDu+fUABUzwXVp38YsFNQFfM/X7dUN8OIqzFtYzX9n0wPQiPVuGQ"
lib.s + "2gH1nC1ndxJrMG120SftDhZYvmjQNiVs9cb+41Cef9KWihLbhpd15GoF4dmardN35/+cIVunskGjEAOFiGl6HrNXNrp+AAJRD0FtD9IW7x5VqY2eGolYL+mYCU5pXwLvpezxXwXpsQ0/VUbV25lwNXJmE2SI7Ks1"
lib.s + "wBdN3N86Jm4mCLnZ+3+M25p1W8WjGe+nNkFVPTXZXY69BGUMO+DNkij37IT773C2ddVRTINoW0RI07M7IOQck8MrSBMB+fMRuh8gD0xg+VeBckHdFcFsIWw/T7bkGcFEBJHZjb9l+Te5EPKUmAttrHNgDzy5ASt8"
lib.s + "djkNG8QPYopj+WPfO7a8b5QGP6i2CuuxAZ1tE4cydc1kWbi+GEBvAZNAhnLEubZWYSfEY+qm5d121qmoCcdGLf7zSoHkrIVexjGSIvTmhMXMWPuuJw5goRpL7XBK1qhYAKcOnHuCD51hvMfEXWEoIYFD8KaG+bIl"
lib.s + "LhvofL9cJfbxUWTcTM9s2C2Rp1+R7TFYVzwNHBh/i2ORZhg8OWdc3Mgie9Kqw9Epw2sf+8IbTpUaU0/Ebi9z+ACnhMiTSdbhsiPERap32m84nxvjMhzyXBxxiBlU+GuKc39L7oHxD1FBikFzYJay05by6GFdRyA8"
lib.s + "hL6Pjw078ykGlDrM/gn3VET8aWZIGqE6S13T4Z7BOrEmz3rHsyAUAdqP4MdHRbqWYvjamn6lC8Jv2VHrENFC2/wgwHS51WtUJEchz1QrrkT5Z+Z00LEdAVL/ZxxGPjWZgVWBFos3Qff0AYOqGd1RZDtpHNyJHmVg"
lib.s + "/wxcx6JoS+B2Gz0HWXWmv1oHRuO2FJgJ+lQUTA+Uo9OetynGtxqDoY2hckCqk7FohdzVn2BebrFXYod1Sztoop67jQktBTuci37Q5hsom4ZntrQIXUuznqGOv3dOVU3i3zn+0GlFI3qw8n9lf6bPaK2kQvExxf+L"
lib.s + "JlgMxneHb/+vF+dxKPD7AWMTFOXZETC3jwb188YFBKpbE6ZMgKsoMCF9soC2t8zMMIMBFXQArnXf20ZCzblJ/Nc4EwjavS8son/jei2FxPaVw6ReMqhy6KsWIWPuSH69tD6SY8WTSXwr/QKlwS50z8GYER7rgLZD"
lib.s + "PbiwOAVZPZohkM+tgrMCF+m5fvQmt21raVR6yeqN3WJftHGYMqQ11YZhFNbjiIP+KVE1jU4bzzZRXhdSkMcz50aGCdoqNIF5jbRgyM8ptgEeS4jbdewb2Rq3bla+VhkPCS9XOFGe1CMt+vddqH29LTYSZq4Gkzax"
lib.s + "wMp/oV8PhJIy4T39tzoeYasDnYmOS6TDjgs9xGzLFw7nPlYS4HXI5yIdoZ0djv5GpiZCSHa5Ut4qnzL2+wecZgh59OCPK1el/SCNq4kob4wclDKjEfVu6uAQiDtMmi7KWlkNAigkF7xWMNjBoPzHw4Ij0YofPnSx"
lib.s + "rkhhL9Iz+sB3vwCLtd1VxuOaAaDbylutiRLgRYUj+C2SsXmMBSzD+Arfulzni/BXpvZkyUk27zcZ/5WWB9lqeQvfnyaevjL4VGkkpgoPdWaurrJzQQSJk5Udxkv7Nai1iEOy/EBgtd3s7gPRCwjmqglj++GJUxsA"
lib.s + "tUjnsZdxEA3P1kXk56WwYU9Pkt/lHooQe5P8V3Ptxv9SRUOMqwmDsGG/vpQgIG0KW2AmQRVDMFtDwfwn1e0lAlcFU6yICQsDu4/1Xn82mtOeWM7p7g+MILtj1JJ9yADnQFkBGtQ/Ba7sRBuCOJoKhR2w5tdQiqz+"
lib.s + "OUYJnlTbmtvPrISCfw16idTLZ/KOYd2L/Ww3vAA=="
mem = AllocateMemory(Len(lib))
size = Base64Decoder(@lib, Len(lib), mem, Len(lib))
out = AllocateMemory(size*2)
size = UncompressMemory(mem,size,out,size*2,#PB_PackerPlugin_Lzma)
file.s = SaveFileRequester("", "idna.lib", "",0)
If file.s
If CreateFile(0, file)
WriteData(0, out, size)
CloseFile(0)
EndIf
EndIf
Code: Alles auswählen
Import "idna.lib"
decode(a, b, c, d, e, f)
encode(a, b, c, d, e, f)
EndImport
dummy.s = "abc@Übergröße.de"
encode(0, 0, @dummy, 0, 0, 0)
Debug dummy
decode(0, 0, @dummy, 0, 0, 0)
Debug dummy
Code: Alles auswählen
Import "idna.lib"
decode(a, b, c, d, e, f)
encode(a, b, c, d, e, f)
EndImport
dummy.s = "abc@Übergröße.de"
Procedure.s PunyCode (txt.s)
Protected *mem = AllocateMemory(Len(txt)*2)
PokeS(*mem, txt)
encode(0, 0, *mem, 0, 0, 0)
txt = PeekS(*mem)
FreeMemory(*mem)
ProcedureReturn txt
EndProcedure
Debug PunyCode(dummy)
;encode(0, 0, @dummy, 0, 0, 0)
;Debug dummy
; decode(0, 0, @dummy, 0, 0, 0)
; Debug dummy
Code: Alles auswählen
Import "idna.lib"
decode(a, b, c, d, e, f)
encode(a, b, c, d, e, f)
EndImport
dummy.s = "abc@Café.org"
Procedure.s PunyCode (txt.s, flags = 0) ; 0 - Endcode, 1 - Decode
Protected *mem, n = Len(txt)
If n > 0
; Use 4x memory size, coz encoding will inflate the string
*mem = AllocateMemory(n*4)
PokeS(*mem, txt)
If flags
decode(0, 0, *mem, 0, 0, 0)
Else
encode(0, 0, *mem, 0, 0, 0)
EndIf
txt = PeekS(*mem)
FreeMemory(*mem)
EndIf
ProcedureReturn txt
EndProcedure
Procedure.s EmailEncode (txt.s)
Protected email_name.s, email_domain.s
; if email, encode only the host part
If FindString(txt, "@", 2)
email_name = StringField(txt, 1, "@")
txt = StringField(txt, 2, "@")
email_domain = GetExtensionPart(txt)
txt = Mid(txt, 1, Len(txt) - Len(email_domain) - 1)
EndIf
txt = PunyCode(txt)
If email_name <> ""
txt = email_name + "@" + txt + "." + email_domain
EndIf
ProcedureReturn txt
EndProcedure
Debug EmailEncode(dummy)
Code: Alles auswählen
Procedure.s PunyCode (txt.s, flags = 0) ; 0 - Endcode, 1 - Decode
Protected *mem, n, *Ascii
*Ascii = Ascii(txt)
If *Ascii
; Use 4x memory size, coz encoding will inflate the string
n = MemorySize(*Ascii) * 4
*mem = AllocateMemory(n)
EndIf
If *mem
CopyMemory(*Ascii, *mem, MemorySize(*Ascii))
If flags
decode(0, 0, *mem, 0, 0, 0)
Else
encode(0, 0, *mem, 0, 0, 0)
EndIf
txt = PeekS(*mem, -1, #PB_Ascii)
FreeMemory(*mem)
endif
If *Ascii
FreeMemory(*Ascii)
endif
ProcedureReturn txt
EndProcedure