long words killing HTML display

Had the same problem so I wrote this method: put it into your helpers and application.rb. There might be a cleaner way using Regexp or scan... this uses String.split() str = the string to split len = longest length of each piece char = character to split them with   # - split a long string into smaller pieces, at most "len" characters   # in length. "len" default is 10, if not supplied.   # - returns the split string   def split_str(str=nil, len=10, char=" ")     len = 10 if len < 1     work_str = str.to_s.split(//) if str     return_str = ""     i = 0     if work_str       work_str.each do |s|         if (s == char || i == len)           return_str += char           return_str += s if s != char           i = 0         else           return_str += s           i += 1         end       end     end     return_str   end

} Had the same problem so I wrote this method: put it into your helpers } and application.rb. There might be a cleaner way using Regexp or } scan... this uses String.split() } str = the string to split } len = longest length of each piece [19 lines of code elided]

Shorter, cleaner, more efficient, whitespace-preserving, and uses the HTML wbr tag (which is a hint for word breaking and is supported well in FF and IE, though poorly in Safari and not at all in Opera):

def split_str(str, len = 10)   fragment = /.{#{len}}/   str.split(/(\s+)/).map! { |word|     (/\s/ === word) ? word : word.gsub(fragment, '\0<wbr />')   }.join end

Note that this will put a wbr tag at the end of words which have a length evenly divisible by len; these can be removed with another gsub if desired, but they are harmless. Note also that Rails does some annoying rewriting of HTML output, and changes <wbr /> into <wbr> for no good reason. This doesn't affect how browsers render things, but it does mean the results are no longer XHTML-compliant.

--Greg

Hey, I said there's probobly a better way to do it. Thanks Greg. I'll put your slimmed down version in.

Bart