?? cgihtml.txt
字號(hào):
CGIHtml函數(shù)子庫文檔
作者: BetonArmEE
最新版本: 2007-05-01 v1.0
>>> 目錄
1.關(guān)于
1.1.功能概述
1.2.兼容平臺(tái)列表
1.3.版本歷史
2.知識(shí)手冊(cè)
2.1.HTML頭、Url重定向、錯(cuò)誤狀態(tài)
2.2.HTML模板技術(shù)
3.使用指南
3.1.HTML頭、Url重定向、錯(cuò)誤狀態(tài)
3.2.HTML模板使用例子
3.3.HTML模板使用中防緩沖區(qū)溢出
3.4.其它HTML處理函數(shù)
4.參考列表
4.1.函數(shù)列表
>>> 正文
1.關(guān)于
1.1.功能概述
CGIHtml主要發(fā)送HTML頭、Url重定向、錯(cuò)誤狀態(tài)等功能,同時(shí)還包含了一個(gè)HTML模板庫。
1.2.兼容平臺(tái)列表
Windows、UNIX、Linux
1.3.版本歷史
2005-05-02 創(chuàng)建 第一版
2007-05-01 創(chuàng)建 文檔
2.知識(shí)手冊(cè)
2.1.HTML頭、Url重定向、錯(cuò)誤狀態(tài)
HTML頭包含在HTTP協(xié)議里面,它總是在發(fā)送HTML代碼前被發(fā)送,當(dāng)然,HTML頭還包含許多其它的內(nèi)容,這里僅支持HTTP數(shù)據(jù)類型,比如HTML類型、圖片類型、下載二進(jìn)制數(shù)據(jù)類型。HTML頭一般和HTML之間有兩個(gè)"\r\n"。一旦發(fā)送了HTML頭,后面就應(yīng)該緊跟HTML代碼。
Url重定向用于在不改變客戶端網(wǎng)址顯示而把當(dāng)前鏈接重定向到另一個(gè)網(wǎng)址上去,一般用于隱藏真實(shí)網(wǎng)址的重定向。一旦url重定向了,后面不應(yīng)該再輸出任何東西。
錯(cuò)誤狀態(tài)用于應(yīng)用程序主動(dòng)置返回代碼給web服務(wù)器軟件,web服務(wù)器軟件選擇合適的返回頁面給瀏覽器。返回代碼包括“200”(正確得到服務(wù)端響應(yīng)處理)等,請(qǐng)參考HTTP規(guī)范。
應(yīng)用代碼中,HTML頭與Url重定向、錯(cuò)誤狀態(tài)只能放在所有輸出最前面且只能選擇其一。
2.2.HTML模板技術(shù)
HTML模板技術(shù)通過在模板字符串中進(jìn)行字符串替換,用于獲得最終HTML代碼流。
HTML模板代碼一般放置在字符數(shù)組緩沖區(qū)里,其中不僅包含符合規(guī)范的HTML代碼,還包含數(shù)據(jù)替換宏。數(shù)據(jù)替換宏也是一串以'\0'結(jié)束的字符數(shù)組變量值,其取名沒有固定要求,但一般推薦以'$'包裹宏名組成以區(qū)別HTML代碼。
3.使用指南
3.1.HTML頭、Url重定向、錯(cuò)誤狀態(tài)
·HTML頭
在發(fā)送HTML代碼前需要發(fā)送HTTP響應(yīng)類型,以下代碼為發(fā)送HTTP響應(yīng)類型為HTML代碼
CGIHtmlSendContent( CONTENT_TYPE_TEXTHTML );
如果HTTP響應(yīng)類型為圖片二進(jìn)制數(shù)據(jù)
CGIHtmlSendContent( CONTENT_TYPE_IMAGEJPEG );
·Url重定向
以下代碼重定向當(dāng)前url為“http://www.xxx.com/”(瀏覽器里的url不變)
CGIHtmlLocationURL( "http://www.xxx.com/" );
·錯(cuò)誤狀態(tài)
以下代碼置HTTP響應(yīng)代碼為“404”
CGIHtmlSendStatus( 404 );
3.2.HTML模板使用例子
char acTemplateBuffer[ 1024 + 1 ] ; /* 聲明模板緩沖區(qū) */
char acHtmlBuffer[ 1024 + 1 ] ; /* HTML緩沖區(qū) */
SList *plistTemplateTag = NULL ; /* 模板替換宏鏈表 */
memset( acTemplateBuffer , 0x00 , sizeof(acTemplateBuffer) );
memset( acHtmlBuffer , 0x00 , sizeof(acHtmlBuffer) );
/* 裝載模板文件 */
iret = CGIHtmlLoadTemplate( "template.html" , acTemplateBuffer ) ;
/* 初始化模板替換宏鏈表 */
plistTemplateTag = CGIHtmlTemplateTagListInitial() ;
/* 向模板替換宏里添加替換項(xiàng) */
CGIHtmlAddTemplateStringTag( &plistTemplateTag , "$用戶名$" , "root" );
CGIHtmlAddTemplateLongTag( &plistTemplateTag , "$CREDIT$" , 1000 );
/* 模板替換宏鏈表處理模板 */
iret = CGIHtmlProcessTemplate( plistTemplateTag , acTemplateBuffer , acHtmlBuffer ) ;
/* 輸出HTML給瀏覽器 */
CGIHtmlSendContent( CONTENT_TYPE_TEXTHTML );
printf( "%s" , acHtmlBuffer );
/* 銷毀模板替換宏鏈表 */
CGIHtmlTemplateTagListDestroy( &plistTemplateTag );
3.3.HTML模板使用中防緩沖區(qū)溢出
在上例中變量acTemplateBuffer、acHtmlBuffer在使用中有可能溢出,比如使用CGIHtmlLoadTemplate裝載的文件太大或者CGIHtmlProcessTemplate處理后的HTML代碼過長,CGIHtml函數(shù)庫提供了這兩個(gè)函數(shù)的安全版本(安全的裝載模板文件函數(shù)CGIHtmlLoadTemplateSafely和安全的模板處理函數(shù)CGIHtmlProcessTemplateSafely)建議在關(guān)鍵代碼部位代替非安全函數(shù)。
3.4.其它HTML處理函數(shù)
函數(shù)CGIHtmlProcessHtmlByUBB可以處理目標(biāo)緩沖區(qū)中的UBB代碼轉(zhuǎn)換成HTML代碼,它的安全版本函數(shù)是CGIHtmlProcessHtmlByUBBSafely。
函數(shù)CGIHtmlProcessTextToHtml可以處理目標(biāo)緩沖區(qū)中的文本代碼轉(zhuǎn)換成HTML代碼(比如'\t'轉(zhuǎn)換為"    ",'\n'轉(zhuǎn)換為"<p>",'<'轉(zhuǎn)換為"<"),它的安全版本函數(shù)是CGIHtmlProcessTextToHtmlSafely。
4.參考列表
4.1.宏列表
CONTENT_TYPE_TEXTHTML HTTP響應(yīng)類型為HTML代碼
CONTENT_TYPE_IMAGEJPEG HTTP響應(yīng)類型為二進(jìn)制圖片數(shù)據(jù)
CONTENT_TYPE_DOWNLOAD HTTP響應(yīng)類型為二進(jìn)制下載數(shù)據(jù)
4.2.函數(shù)列表
void CGIHtmlSendContent( int ContentType );
void CGIHtmlLocationURL( char *url );
void CGIHtmlSendStatus( int status );
SList *CGIHtmlTemplateTagListInitial();
BOOL CGIHtmlTemplateTagListDestroy( SList **listHtmlTemplateTag );
int CGIHtmlLoadTemplate( char *filename , char *template_buf );
int CGIHtmlLoadTemplateSafely( char *filename , char **template_buf , long *template_buf_size );
BOOL CGIHtmlAddTemplateLongTag( SList **listHtmlTemplateTag , char *tag , long l );
BOOL CGIHtmlAddTemplateDoubleTag( SList **listHtmlTemplateTag , char *tag , double d );
BOOL CGIHtmlAddTemplateStringTag( SList **listHtmlTemplateTag , char *tag , char *str );
int CGIHtmlProcessTemplate( SList *listHtmlTemplateTag , char *template_buf , char *html_buf );
int CGIHtmlProcessTemplateSafely( SList *listHtmlTemplateTag , char *template_buf , long *template_buf_size , char **html_buf , long *html_buf_size );
int CGIHtmlProcessHtmlByUBB( char *html_buf );
int CGIHtmlProcessHtmlByUBBSafely( char **html_buf , long *html_buf_size );
int CGIHtmlProcessTextToHtml( char *html_buf );
int CGIHtmlProcessTextToHtmlSafely( char **html_buf , long *html_buf_size );
·CGIHtmlSendContent
設(shè)置HTTP響應(yīng)類型
函數(shù)原型:
void CGIHtmlSendContent( int ContentType );
輸入?yún)?shù):
int ContentType HTTP響應(yīng)類型
返回值:
(無)
詳細(xì)描述與注意事項(xiàng):
(無)
示例代碼:
CGIHtmlSendContent( CONTENT_TYPE_TEXTHTML );
相關(guān)函數(shù):
CGIHtmlLocationURL , CGIHtmlSendStatus
·CGIHtmlLocationURL
重定向當(dāng)前url
函數(shù)原型:
void CGIHtmlLocationURL( char *url );
輸入?yún)?shù):
char *url 新的url
返回值:
(無)
詳細(xì)描述與注意事項(xiàng):
瀏覽器里的url不變
示例代碼:
CGIHtmlLocationURL( "http://www.xxx.com" );
相關(guān)函數(shù):
CGIHtmlSendContent , CGIHtmlSendStatus
·CGIHtmlSendStatus
發(fā)送HTTP錯(cuò)誤代碼給瀏覽器
函數(shù)原型:
void CGIHtmlSendStatus( int status );
輸入?yún)?shù):
int status HTTP錯(cuò)誤代碼
返回值:
(無)
詳細(xì)描述與注意事項(xiàng):
瀏覽器里的url不變
示例代碼:
CGIHtmlSendStatus( 404 );
相關(guān)函數(shù):
CGIHtmlSendContent , CGIHtmlLocationURL
·CGIHtmlTemplateTagListInitial
初始化HTML模板替換宏鏈表
函數(shù)原型:
SList *CGIHtmlTemplateTagListInitial();
輸入?yún)?shù):
(無)
返回值:
NULL
詳細(xì)描述與注意事項(xiàng):
(無)
示例代碼:
SList *plistTemplateTag = NULL ;
plistTemplateTag = CGIHtmlTemplateTagListInitial() ;
相關(guān)函數(shù):
CGIHtmlTemplateTagListDestroy
·CGIHtmlTemplateTagListDestroy
銷毀HTML模板替換宏鏈表
函數(shù)原型:
BOOL CGIHtmlTemplateTagListDestroy( SList **listHtmlTemplateTag );
輸入?yún)?shù):
SList **listHtmlTemplateTag HTML模板替換宏鏈表首結(jié)點(diǎn)地址的地址
返回值:
成功,返回 TRUE
失敗,返回 FALSE
詳細(xì)描述與注意事項(xiàng):
(無)
示例代碼:
SList *plistTemplateTag = NULL ;
BOOL bret ;
bret = CGIHtmlTemplateTagListDestroy( &plistTemplateTag ) ;
相關(guān)函數(shù):
CGIHtmlTemplateTagListInitial
·CGIHtmlLoadTemplate
裝載HTML模板
函數(shù)原型:
int CGIHtmlLoadTemplate( char *filename , char *template_buf );
輸入?yún)?shù):
char *filename 外部HTML模板文件名
char *template_buf 裝載緩沖區(qū)
返回值:
成功,返回 0
失敗,返回 -1
詳細(xì)描述與注意事項(xiàng):
(無)
示例代碼:
char acTemplateBuffer[ 1024 + 1 ] ;
int iret ;
iret = CGIHtmlLoadTemplate( "template.html" , acTemplateBuffer ) ;
相關(guān)函數(shù):
CGIHtmlLoadTemplateSafely
·CGIHtmlLoadTemplateSafely
安全的裝載HTML模板
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -