Umlaute in E-Mail Adressen kodieren (IDNA)
-
- Beiträge: 56
- Registriert: 12.11.2015 17:41
Re: Umlaute in E-Mail Adressen kodieren (IDNA)
nö hab ich nicht. meine vorhin gestellte frage wurde schon beantwortet.
Re: Umlaute in E-Mail Adressen kodieren (IDNA)
Hier mal eine statische Lib (nur neu kompiliert) fuer ASCII Strings (Ja, Thomas... ich habe mein Passwort wieder vergessen
)
Das ganze kannst du dann so aufrufen :

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
Re: Umlaute in E-Mail Adressen kodieren (IDNA)
Danke schon mal an alle für die Hilfe!!
@ts-soft: da passiert leider nix. Es wird nichts umcodiert.
@Edel: Super! Mit der Lib funktionierts sehr gut.
Das das Ergebnis über den gleichen Speicherbereich verfügbar ist, scheint mir kritisch.
Vermutlich ist es besser, einen größeren Speicherbereich anzulegen, damit es nicht
kracht, wenn der kodierte String größer wird:
@ts-soft: da passiert leider nix. Es wird nichts umcodiert.
@Edel: Super! Mit der Lib funktionierts sehr gut.
Das das Ergebnis über den gleichen Speicherbereich verfügbar ist, scheint mir kritisch.
Vermutlich ist es besser, einen größeren Speicherbereich anzulegen, damit es nicht
kracht, wenn der kodierte String größer wird:
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
"Papa, ich laufe schneller - dann ist es nicht so weit."
Re: Umlaute in E-Mail Adressen kodieren (IDNA)
Mit korrekter E-Mail Kodierung:
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)
"Papa, ich laufe schneller - dann ist es nicht so weit."
Re: Umlaute in E-Mail Adressen kodieren (IDNA)
Update für Purebasic (Unicode Version)
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
"Papa, ich laufe schneller - dann ist es nicht so weit."