2017-01-25 9 views
1

HTML_PARSE_NOWARNINGフラグを確認するためにPHPでパッケージ化された環境以外の環境でlibxmlを使用する人物を探しています。 警告は引き続き生成されます。 Cでのlibxmlを実装PHPからlibxml htmlParseDocument htmlParseOptionフラグを無視する

ソースコード:

//one of these options is 64 or HTML_PARSE_NOWARNING 
htmlCtxtUseOptions(ctxt, (int)options); 

ctxt->vctxt.error = php_libxml_ctx_error; 
ctxt->vctxt.warning = php_libxml_ctx_warning; 
if (ctxt->sax != NULL) { 
    ctxt->sax->error = php_libxml_ctx_error; 
    ctxt->sax->warning = php_libxml_ctx_warning; 
} 
htmlParseDocument(ctxt); //this still produces warnings 

答えて

2

libxml2のHTML_PARSE_NOWARNINGフラグを無視しません。 htmlCtxtUseOptionsHTML_PARSE_NOWARNINGと呼び出すと、警告ハンドラが登録解除されます(NULLに設定されます)。しかし、PHPコードはそれ自身のハンドラを無条件にインストールし、フラグを無用にします。 PHPコードは、どちらかのハンドラをインストールするかどうかのチェックを追加する必要があります

htmlCtxtUseOptions(ctxt, (int)options); 

if (!(options & HTML_PARSE_NOERROR)) { 
    ctxt->vctxt.error = php_libxml_ctx_error; 
    if (ctxt->sax != NULL) 
     ctxt->sax->error = php_libxml_ctx_error; 
} 
if (!(options & HTML_PARSE_NOWARNING)) { 
    ctxt->vctxt.warning = php_libxml_ctx_warning; 
    if (ctxt->sax != NULL) 
     ctxt->sax->warning = php_libxml_ctx_warning; 
} 
htmlParseDocument(ctxt); 

またはハンドラを設定した後htmlCtxtUseOptionsを呼び出す:

ctxt->vctxt.error = php_libxml_ctx_error; 
ctxt->vctxt.warning = php_libxml_ctx_warning; 
if (ctxt->sax != NULL) { 
    ctxt->sax->error = php_libxml_ctx_error; 
    ctxt->sax->warning = php_libxml_ctx_warning; 
} 

htmlCtxtUseOptions(ctxt, (int)options); 
htmlParseDocument(ctxt); 
+0

グッドニュースは、修正が簡単です。それでもなお、PHPのソースをパッチする必要があります。 – user2782001

関連する問題