151 lines
4.7 KiB
Diff
151 lines
4.7 KiB
Diff
From d459831c1b308c2095a1b73800e0238269d4106a Mon Sep 17 00:00:00 2001
|
|
From: Nick Wellnhofer <wellnhofer@aevum.de>
|
|
Date: Sat, 13 Oct 2018 16:12:14 +0200
|
|
Subject: [PATCH 32/62] Fix HTML serialization with UTF-8 encoding
|
|
|
|
If the encoding is specified as UTF-8, make sure to use a NULL encoding
|
|
handler.
|
|
---
|
|
HTMLtree.c | 84 ++++++++++++++++++++++++++++++--------------------------------
|
|
1 file changed, 40 insertions(+), 44 deletions(-)
|
|
|
|
diff --git a/HTMLtree.c b/HTMLtree.c
|
|
index 6a2f43d..21cfcfe 100644
|
|
--- a/HTMLtree.c
|
|
+++ b/HTMLtree.c
|
|
@@ -502,17 +502,17 @@ htmlNodeDumpFileFormat(FILE *out, xmlDocPtr doc,
|
|
if (handler == NULL)
|
|
htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
|
|
}
|
|
+ } else {
|
|
+ /*
|
|
+ * Fallback to HTML or ASCII when the encoding is unspecified
|
|
+ */
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("HTML");
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("ascii");
|
|
}
|
|
|
|
/*
|
|
- * Fallback to HTML or ASCII when the encoding is unspecified
|
|
- */
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("HTML");
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("ascii");
|
|
-
|
|
- /*
|
|
* save the content to a temp buffer.
|
|
*/
|
|
buf = xmlOutputBufferCreateFile(out, handler);
|
|
@@ -575,19 +575,17 @@ htmlDocDumpMemoryFormat(xmlDocPtr cur, xmlChar**mem, int *size, int format) {
|
|
if (handler == NULL)
|
|
htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
|
|
|
|
- } else {
|
|
- handler = xmlFindCharEncodingHandler(encoding);
|
|
}
|
|
+ } else {
|
|
+ /*
|
|
+ * Fallback to HTML or ASCII when the encoding is unspecified
|
|
+ */
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("HTML");
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("ascii");
|
|
}
|
|
|
|
- /*
|
|
- * Fallback to HTML or ASCII when the encoding is unspecified
|
|
- */
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("HTML");
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("ascii");
|
|
-
|
|
buf = xmlAllocOutputBufferInternal(handler);
|
|
if (buf == NULL) {
|
|
*mem = NULL;
|
|
@@ -1096,19 +1094,17 @@ htmlDocDump(FILE *f, xmlDocPtr cur) {
|
|
handler = xmlFindCharEncodingHandler(encoding);
|
|
if (handler == NULL)
|
|
htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
|
|
- } else {
|
|
- handler = xmlFindCharEncodingHandler(encoding);
|
|
}
|
|
+ } else {
|
|
+ /*
|
|
+ * Fallback to HTML or ASCII when the encoding is unspecified
|
|
+ */
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("HTML");
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("ascii");
|
|
}
|
|
|
|
- /*
|
|
- * Fallback to HTML or ASCII when the encoding is unspecified
|
|
- */
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("HTML");
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("ascii");
|
|
-
|
|
buf = xmlOutputBufferCreateFile(f, handler);
|
|
if (buf == NULL) return(-1);
|
|
htmlDocContentDumpOutput(buf, cur, NULL);
|
|
@@ -1149,17 +1145,17 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) {
|
|
if (handler == NULL)
|
|
htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
|
|
}
|
|
+ } else {
|
|
+ /*
|
|
+ * Fallback to HTML or ASCII when the encoding is unspecified
|
|
+ */
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("HTML");
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("ascii");
|
|
}
|
|
|
|
/*
|
|
- * Fallback to HTML or ASCII when the encoding is unspecified
|
|
- */
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("HTML");
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("ascii");
|
|
-
|
|
- /*
|
|
* save the content to a temp buffer.
|
|
*/
|
|
buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
|
|
@@ -1206,15 +1202,15 @@ htmlSaveFileFormat(const char *filename, xmlDocPtr cur,
|
|
htmlSetMetaEncoding(cur, (const xmlChar *) encoding);
|
|
} else {
|
|
htmlSetMetaEncoding(cur, (const xmlChar *) "UTF-8");
|
|
- }
|
|
|
|
- /*
|
|
- * Fallback to HTML or ASCII when the encoding is unspecified
|
|
- */
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("HTML");
|
|
- if (handler == NULL)
|
|
- handler = xmlFindCharEncodingHandler("ascii");
|
|
+ /*
|
|
+ * Fallback to HTML or ASCII when the encoding is unspecified
|
|
+ */
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("HTML");
|
|
+ if (handler == NULL)
|
|
+ handler = xmlFindCharEncodingHandler("ascii");
|
|
+ }
|
|
|
|
/*
|
|
* save the content to a temp buffer.
|
|
--
|
|
1.8.3.1
|
|
|