トップ 一覧 ping 検索 ヘルプ RSS ログイン

HTML 長い文字列の改行の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!HTML 長い文字列の改行

*ブロック要素の中に長い文字列を置くと、折り返されない。
*例えば、IEとFirefoxでは、divタグの中に長い文字列を置いたときに挙動が異なる。

http://yoosee.net/d/archives/2005/01/04/002.html
http://archiva.jp/web/html-css/20060808013000.html

*GMailでは、<wbr>を使ってた。

{{ref_image wbr.jpg}}

----
'''適当な位置に、<wbr>を入れる'''
*HTMLタグ以外の特殊文字はエスケープされていること

 public static String blockComment(String value, int column) {
   final String WORD_BREAK_STR = "<wbr>";
 
   char[] c = value.toCharArray();
   StringBuilder buf = new StringBuilder(c.length + 20);
   boolean isInTag = false;
   boolean isEscChar = false;
   int charCnt = 0;
 
   for(int i=0; i<c.length; i++) {
       switch (c[i]) {
       case '<': isInTag   = true;  break;
       case '>': isInTag   = false; break;
       case '&': isEscChar = true;  break;
       case ';': isEscChar = false; break;
       default:
       }
       if (!isInTag) {
           try {
     switch (c[i]) {
     case '<': isInTag   = true;  break;
     case '>': isInTag   = false; break;
     case '&': isEscChar = true;  break;
     case ';': isEscChar = false; break;
     default:
     }
     if (!isInTag) {
       try {
         charCnt += String.valueOf(c[i]).getBytes("Shift_JIS").length;
       } catch (UnsupportedEncodingException e) {}
       }
       if (isEscChar) {
         if (c[i]=='&') {
           charCnt++;
         } 
       }
       buf.append(c[i]);
       if (charCnt >= column) {
           buf.append(WORD_BREAK_STR);
           charCnt = 0;
       }
     }
     if (isEscChar) {
       if (c[i]=='&') {
         charCnt++;
       } 
     }
     buf.append(c[i]);
     if (charCnt >= column) {
       buf.append(WORD_BREAK_STR);
       charCnt = 0;
     }
   }   
   return buf.toString();
 }