- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 libtidy 塞进 C++ 程序中,并尽量减少返工。 C++ 程序需要在 char * 中生成(清理过的)HTML。我正在使用 libtidy 示例代码,但尝试使用 tidySaveString 而不是 tidySaveBuffer ,它想要使用 libtidy 自己的缓冲区。
问题 1 是我似乎无法找到一种(明智的)方法来确定我需要为缓冲区分配的大小,libtidy 文档中似乎没有什么明显的东西。
问题 2 是,当我使用不明智的方法获取大小(将其输出到 tidyBuffer 并获取其大小)然后分配我的内存并调用 tidySaveString 时,我总是会收到 -ENOMEM 错误。
这是我正在使用的改编代码:
.
.
.
char *buffer_;
char *cleansed_buffer_;
.
.
.
int ProcessHtml::Clean(){
// uses Libtidy to convert the buffer to XML
TidyBuffer output = {0};
TidyBuffer errbuf = {0};
int rc = -1;
Bool ok;
TidyDoc tdoc = tidyCreate(); // Initialize "document"
ok = tidyOptSetBool( tdoc, TidyXhtmlOut, yes ); // Convert to XHTML
if ( ok )
rc = tidySetErrorBuffer( tdoc, &errbuf ); // Capture diagnostics
if ( rc >= 0 )
rc = tidyParseString( tdoc, this->buffer_ ); // Parse the input
if ( rc >= 0 )
rc = tidyCleanAndRepair( tdoc ); // Tidy it up!
if ( rc >= 0 )
rc = tidyRunDiagnostics( tdoc ); // Kvetch
if ( rc > 1 ) // If error, force output.
rc = ( tidyOptSetBool(tdoc, TidyForceOutput, yes) ? rc : -1 );
if ( rc >= 0 ){
rc = tidySaveBuffer( tdoc, &output ); // Pretty Print
// get some mem
uint yy = output.size;
cleansed_buffer_ = (char *)malloc(yy+10);
uint xx = 0;
rc = tidySaveString(tdoc, this->cleansed_buffer_,&xx );
if (rc == -ENOMEM)
cout << "yikes!!\n" << endl;
}
if ( rc >= 0 )
{
if ( rc > 0 )
printf( "\nDiagnostics:\n\n%s", errbuf.bp );
printf( "\nAnd here is the result:\n\n%s", cleansed_buffer_ );
}
else
printf( "A severe error (%d) occurred.\n", rc );
tidyBufFree( &output );
tidyBufFree( &errbuf );
tidyRelease( tdoc );
return rc;
}
它从输入缓冲区 (buffer_) 读取要清除的字节,我确实需要 (cleansed_buffer_) 中的输出。理想情况下(显然)我不想将文档转储到输出缓冲区只是为了获得大小 - 而且,我需要找到一种方法让它工作。
感谢所有的帮助..
最佳答案
你必须传入缓冲区大小...
uint yy = output.size;
cleansed_buffer_ = (char *)malloc(yy+10);
uint xx = yy+10; /* <---------------------------------- HERE */
rc = tidySaveString(tdoc, this->cleansed_buffer_,&xx );
if (rc == -ENOMEM)
cout << "yikes!!\n" << endl;
或者,您可以通过这种方式获取尺寸:
cleansed_buffer_ = (char *)malloc(1);
uint size = 0
rc = tidySaveString(tdoc, cleansed_buffer_, &size );
// now size is the required size
free(cleansed_buffer_);
cleansed_buffer_ = (char *)malloc(size+1);
rc = tidySaveString(tdoc, cleansed_buffer_, &size );
关于c++ - 如何将 libtidy 的解析输出转换为 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162706/
每个人 - 长期倾听者,第一次调用者。 我一直在 macOS 10.13 上使用 C 语言使用 libtidy。我从示例代码开始 here并将其修改为读取本地 html 文件而不是使用 curl。除了
我使用的是相对较新的 Windows 7 计算机,在 Notepad++ 中 TextFX HTMLTidy 无法工作。它显示“无法在系统路径或 C:\program files (x86)\Note
我正在使用 libtidy 并且需要检索基于字符串的选项的当前值(例如,TidyOptErrFile, a.k.a. error-file)。 即使通读了 tidy source code ,我不知道
我正在尝试将 libtidy 塞进 C++ 程序中,并尽量减少返工。 C++ 程序需要在 char * 中生成(清理过的)HTML。我正在使用 libtidy 示例代码,但尝试使用 tidySaveS
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在尝试使用 tidylib 中的 tidy_document() 函数将 html 文档格式化为 xhtml在我可以将它发布到某个地方并在堆栈中向上几步之前,抛出了一个异常。代码被包裹在一个 tr
我正在尝试使用 libtidy(C 语言)清理一些 HTML,问题是: 我想用 tidyParseBuffer() 构造一个 TidyDoc(树状结构)。 我对 tidyParseFile() 没问题
我用 C++ 编写了一个使用 libtidy 的扩展,当我编译 PHP --with-tidy 时,它在 PHP 下完美运行。 但是,如果扩展在 vanilla PHP 上运行会很好。当我尝试使用扩展
我有这个函数可以将输入的html转换为xhtml: char* cleanhtml(char* localhtml) { char *buffer_; static char *cleansed_bu
运气不好,我一直在尝试在 Visual Studio 中附加 HTMLTidy c++ 库 dll,但是每次我在不同的构建中遇到各种错误。我正在添加对项目的引用,然后手动选择已复制到项目文件夹内的 l
我正在回答我自己的问题,但因为我整晚都在想办法解决这个问题,所以我希望能减轻其他人的痛苦。如果您在正确安装后收到以下任一消息 pytidylib或 utidylib ,这个答案可能会有所帮助。 在 S
我是一名优秀的程序员,十分优秀!