私が抱えている大きな問題は、ユーザーが WORD から直接フィールドにコピーすると、生成している xml が無効になることです。この問題に対するさまざまなアプローチを見つけましたが、これらの無効な文字を WORD から来ているかどうかにかかわらず、xml から削除する最もグルーヴィーな方法と考えられるものは何ですか?
質問する
872 次
1 に答える
2
Word から投稿されたテキストをクリーンアップしようとする単一の静的メソッドを使用して、Java クラス (今から 7 年前、タイムスタンプを確認) を作成しました。
興味のある方はこちら:
/**
* <p>Title: Word Cleaner</p>
* <p>Description: Strips out all of the rubbish that Word tends to generate (open, close quotes, etc)</p>
*
* Based on John Walker's "Demoroniser" Perl script : http://www.fourmilab.ch/webtools/demoroniser/
*/
public class WordCleaner
{
private WordCleaner() {}
public static String runWordCleaner( String input )
{
StringBuffer sb = new StringBuffer() ;
int len = input == null ? 0 : input.length() ;
for( int i = 0 ; i < len ; i++ )
{
int c ;
switch( c = (int)input.charAt( i ) )
{
case 0x82 : sb.append( "," ) ; break ;
case 0x83 : sb.append( "f" ) ; break ;
case 0x84 : sb.append( ",," ) ; break ;
case 0x85 : sb.append( "..." ) ; break ;
case 0x88 : sb.append( "^" ) ; break ;
case 0x89 : sb.append( "ppt" ) ; break ;
case 0x8B : sb.append( "<" ) ; break ;
case 0x8C : sb.append( "Oe" ) ; break ;
case 0x91 : sb.append( "'" ) ; break ;
case 0x92 : sb.append( "'" ) ; break ;
case 0x93 : sb.append( "\"" ) ; break ;
case 0x94 : sb.append( "\"" ) ; break ;
case 0x95 : sb.append( "*" ) ; break ;
case 0x96 : sb.append( "-" ) ; break ;
case 0x97 : sb.append( "--" ) ; break ;
case 0x98 : sb.append( "~" ) ; break ;
case 0x99 : sb.append( "TM" ) ; break ;
case 0x9B : sb.append( ">" ) ; break ;
case 0x9C : sb.append( "oe" ) ; break ;
case 0xA9 : sb.append( "(c)" ) ; break ;
case 0xAE : sb.append( "(r)" ) ; break ;
case 0xBC : sb.append( "1/4" ) ; break ;
case 0xBD : sb.append( "1/2" ) ; break ;
case 0xBE : sb.append( "3/4" ) ; break ;
case 8208 : sb.append( "-" ) ; break ;
case 8209 : sb.append( "-" ) ; break ;
case 8211 : sb.append( "--" ) ; break ;
case 8212 : sb.append( "--" ) ; break ;
case 8213 : sb.append( "--" ) ; break ;
case 8214 : sb.append( "||" ) ; break ;
case 8215 : sb.append( "_" ) ; break ;
case 8216 : sb.append( "'" ) ; break ;
case 8217 : sb.append( "'" ) ; break ;
case 8218 : sb.append( "," ) ; break ;
case 8219 : sb.append( "'" ) ; break ;
case 8220 : sb.append( "\"" ) ; break ;
case 8221 : sb.append( "\"" ) ; break ;
case 8222 : sb.append( ",," ) ; break ;
case 8223 : sb.append( "\"" ) ; break ;
case 8226 : sb.append( "*" ) ; break ;
case 8227 : sb.append( ">" ) ; break ;
case 8228 : sb.append( "*" ) ; break ;
case 8229 : sb.append( ".." ) ; break ;
case 8230 : sb.append( "..." ) ; break ;
case 8231 : sb.append( "-" ) ; break ;
case 61514 : sb.append( ":-)" ) ; break ;
case 61515 : sb.append( ":-|" ) ; break ;
case 61516 : sb.append( ":-(" ) ; break ;
default : sb.append( (char)c ) ;
}
}
return sb.toString() ;
}
}
于 2012-10-09T14:33:27.107 に答える