「HTML 長い文字列の改行」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==HTML 長い文字列の改行== *ブロック要素の中に長い文字列を置くと、折り返されない。 *例えば、IEとFirefoxでは、divタグの中…」) |
|||
| 7行目: | 7行目: | ||
http://archiva.jp/web/html-css/20060808013000.html | http://archiva.jp/web/html-css/20060808013000.html | ||
| − | *GMailでは、 | + | *GMailでは、<wbr>を使ってた。 |
[[File:0607_wbr.jpg]] | [[File:0607_wbr.jpg]] | ||
---- | ---- | ||
| − | '''適当な位置に、 | + | '''適当な位置に、<wbr>を入れる''' |
*HTMLタグ以外の特殊文字はエスケープされていること | *HTMLタグ以外の特殊文字はエスケープされていること | ||
public static String blockComment(String value, int column) { | public static String blockComment(String value, int column) { | ||
| − | final String WORD_BREAK_STR = " | + | final String WORD_BREAK_STR = "<wbr>"; |
char[] c = value.toCharArray(); | char[] c = value.toCharArray(); | ||
| 24行目: | 24行目: | ||
int charCnt = 0; | int charCnt = 0; | ||
| − | for(int i=0; i | + | for(int i=0; i<c.length; i++) { |
switch (c[i]) { | switch (c[i]) { | ||
| − | case ' | + | case '<': isInTag = true; break; |
| − | case ' | + | case '>': isInTag = false; break; |
case '&': isEscChar = true; break; | case '&': isEscChar = true; break; | ||
case ';': isEscChar = false; break; | case ';': isEscChar = false; break; | ||
| 43行目: | 43行目: | ||
} | } | ||
buf.append(c[i]); | buf.append(c[i]); | ||
| − | if (charCnt | + | if (charCnt >= column) { |
buf.append(WORD_BREAK_STR); | buf.append(WORD_BREAK_STR); | ||
charCnt = 0; | charCnt = 0; | ||
2020年2月15日 (土) 08:03時点における版
HTML 長い文字列の改行
- ブロック要素の中に長い文字列を置くと、折り返されない。
- 例えば、IEとFirefoxでは、divタグの中に長い文字列を置いたときに挙動が異なる。
http://yoosee.net/d/archives/2005/01/04/002.html http://archiva.jp/web/html-css/20060808013000.html
- GMailでは、<wbr>を使ってた。
適当な位置に、<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 {
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;
}
}
return buf.toString();
}
© 2006 矢木浩人
