筑波大学 システム情報工学研究科 コンピュータサイエンス専攻, 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2010/No9_files/html-escape.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2010/
http://www.coins.tsukuba.ac.jp/~yas/
166: char *html_escape( char *str ) 167: { 168: int len ; 169: char c, *tmp, *p, *res ; 170: 171: len = strlen( str ); 172: tmp = malloc( len * 6 + 1 ); 173: if( tmp == 0 ) 174: return( 0 ); 175: p = tmp ; 176: while( c = *str++ ) 177: { 178: switch( c ) 179: { 180: case '&': memcpy(p,"&", 5); p += 5 ; break; 181: case '<': memcpy(p,"<", 4); p += 4 ; break; 182: case '>': memcpy(p,">", 4); p += 4 ; break; 183: case '"': memcpy(p,""",6); p += 6 ; break; 184: default: *p = c ; p++ ; break; 185: } 186: } 187: *p = 0 ; 188: res = strdup( tmp ); 189: free( tmp ); 190: return( res ); 191: } 192:html_escape() は、次の表の文字を置換えている。
画面表示 代りに送りだす文字列 ---------------------------------------------------------------------- & & < < > > " "たとえば、<SCRIPT> のような文字列がクライアントから送られて きたとしても、クライアントには「<SCRIPT>」と 返すだけで、スクリプトは実行されない。
len * 6 は、最大で元の文字列の6倍の長さになることに備えている。