diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2007-09-27 13:57:29 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2007-09-27 13:57:29 +0000 |
commit | a9d6811bdcbf2d49307c99751377f85d429c1032 (patch) | |
tree | cca4642bb11c69c53b4f9061d5564dd5c8696cad /render/form.c | |
parent | c5870e07cd0f9e4bd5f3556fd6dcd5d2227f5c6c (diff) | |
download | netsurf-a9d6811bdcbf2d49307c99751377f85d429c1032.tar.gz netsurf-a9d6811bdcbf2d49307c99751377f85d429c1032.tar.bz2 |
Also try charsets without transliteration -- not all iconv() implementations support //TRANSLIT as it's a non-standard extension.
svn path=/trunk/netsurf/; revision=3598
Diffstat (limited to 'render/form.c')
-rw-r--r-- | render/form.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/render/form.c b/render/form.c index f9c4d4971..d99205047 100644 --- a/render/form.c +++ b/render/form.c @@ -707,15 +707,36 @@ char *form_encode_item(const char *item, const char *charset, err = utf8_to_enc(item, cset, 0, &ret); if (err == UTF8_CONVERT_BADENC) { - /* charset not understood, try fallback charset (if any) */ - if (fallback) { - snprintf(cset, sizeof cset, "%s//TRANSLIT", fallback); - err = utf8_to_enc(item, cset, 0, &ret); + /* charset not understood, try without transliteration */ + snprintf(cset, sizeof cset, "%s", charset); + err = utf8_to_enc(item, cset, 0, &ret); + + if (err == UTF8_CONVERT_BADENC) { + /* nope, try fallback charset (if any) */ + if (fallback) { + snprintf(cset, sizeof cset, + "%s//TRANSLIT", fallback); + err = utf8_to_enc(item, cset, 0, &ret); + + if (err == UTF8_CONVERT_BADENC) { + /* and without transliteration */ + snprintf(cset, sizeof cset, + "%s", fallback); + err = utf8_to_enc(item, cset, 0, &ret); + } + } + + if (err == UTF8_CONVERT_BADENC) { + /* that also failed, use 8859-1 */ + err = utf8_to_enc(item, "ISO-8859-1//TRANSLIT", + 0, &ret); + if (err == UTF8_CONVERT_BADENC) { + /* and without transliteration */ + err = utf8_to_enc(item, "ISO-8859-1", + 0, &ret); + } + } } - if (err == UTF8_CONVERT_BADENC) - /* that also failed, use 8859-1 */ - err = utf8_to_enc(item, "ISO-8859-1//TRANSLIT", - 0, &ret); } if (err == UTF8_CONVERT_NOMEM) { return NULL; @@ -723,3 +744,4 @@ char *form_encode_item(const char *item, const char *charset, return ret; } + |