@@ -95,17 +95,18 @@ static parsedParsleyPtr parse_error(char* format, ...) {
95
95
parsedParsleyPtr parsley_parse_file (parsleyPtr parsley , char * file , int flags ) {
96
96
xmlSetGenericErrorFunc (NULL , parsleyXsltError );
97
97
bool html = flags & PARSLEY_OPTIONS_HTML ;
98
+ char * encoding = flags & PARSLEY_OPTIONS_FORCE_UTF8 ? "UTF-8" : NULL ;
98
99
if (html ) {
99
100
htmlParserCtxtPtr htmlCtxt = htmlNewParserCtxt ();
100
- htmlDocPtr html = htmlCtxtReadFile (htmlCtxt , file , NULL , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
101
+ htmlDocPtr html = htmlCtxtReadFile (htmlCtxt , file , encoding , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
101
102
htmlFreeParserCtxt (htmlCtxt );
102
103
if (html == NULL ) return parse_error ("Couldn't parse file: %s\n" , file );
103
104
parsedParsleyPtr out = parsley_parse_doc (parsley , html , flags );
104
105
xmlFreeDoc (html );
105
106
return out ;
106
107
} else {
107
108
xmlParserCtxtPtr ctxt = xmlNewParserCtxt ();
108
- xmlDocPtr xml = xmlCtxtReadFile (ctxt , file , NULL , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
109
+ xmlDocPtr xml = xmlCtxtReadFile (ctxt , file , encoding , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
109
110
xmlFreeParserCtxt (ctxt );
110
111
if (xml == NULL ) return parse_error ("Couldn't parse file: %s\n" , file );
111
112
parsedParsleyPtr out = parsley_parse_doc (parsley , xml , flags );
@@ -117,17 +118,18 @@ parsedParsleyPtr parsley_parse_file(parsleyPtr parsley, char* file, int flags) {
117
118
parsedParsleyPtr parsley_parse_string (parsleyPtr parsley , char * string , size_t size , char * base_uri , int flags ) {
118
119
xmlSetGenericErrorFunc (NULL , parsleyXsltError );
119
120
bool html = flags & PARSLEY_OPTIONS_HTML ;
121
+ char * encoding = flags & PARSLEY_OPTIONS_FORCE_UTF8 ? "UTF-8" : NULL ;
120
122
if (base_uri == NULL ) base_uri = "http://parselets.com/in-memory-string" ;
121
123
if (html ) {
122
124
htmlParserCtxtPtr htmlCtxt = htmlNewParserCtxt ();
123
- htmlDocPtr html = htmlCtxtReadMemory (htmlCtxt , string , size , base_uri , NULL , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
125
+ htmlDocPtr html = htmlCtxtReadMemory (htmlCtxt , string , size , base_uri , encoding , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
124
126
if (html == NULL ) return parse_error ("Couldn't parse string" );
125
127
parsedParsleyPtr out = parsley_parse_doc (parsley , html , flags );
126
128
xmlFreeDoc (html );
127
129
return out ;
128
130
} else {
129
131
xmlParserCtxtPtr ctxt = xmlNewParserCtxt ();
130
- xmlDocPtr xml = xmlCtxtReadMemory (ctxt , string , size , base_uri , NULL , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
132
+ xmlDocPtr xml = xmlCtxtReadMemory (ctxt , string , size , base_uri , encoding , HTML_PARSE_RECOVER | HTML_PARSE_NOERROR |HTML_PARSE_NOWARNING );
131
133
if (xml == NULL ) return parse_error ("Couldn't parse string" );
132
134
parsedParsleyPtr out = parsley_parse_doc (parsley , xml , flags );
133
135
xmlFreeDoc (xml );
0 commit comments