筑波大学 システム情報工学研究科
コンピュータサイエンス専攻, 電子・情報工学系
新城 靖
<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倍の長さになることに備えている。