システムプログラム(第9週): html_escape()

                                       筑波大学 システム情報工学研究科 
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2011/2011-06-22/html-escape.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2011/
http://www.coins.tsukuba.ac.jp/~yas/

html_escape()

 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,"&amp;", 5); p += 5 ; break;
 181:	            case '<': memcpy(p,"&lt;",  4); p += 4 ; break;
 182:	            case '>': memcpy(p,"&gt;",  4); p += 4 ; break;
 183:	            case '"': memcpy(p,"&quot;",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() は、次の表の文字を置換えている。
画面表示	代りに送りだす文字列
----------------------------------------------------------------------
&		&amp;
<		&lt;
>		&gt;
"		&quot;

たとえば、<SCRIPT> のような文字列がクライアントから送られて きたとしても、クライアントには「&lt;SCRIPT&gt;」と 返すだけで、スクリプトは実行されない。

len * 6 は、最大で元の文字列の6倍の長さになることに備えている。


Last updated: 2011/06/20 15:18:20
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>