diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 28397c945..68d9ad14d 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -132,14 +132,21 @@ module RepositoriesHelper # do nothing here and try the next encoding end end + str = replace_invalid_utf8(str) + end + + def replace_invalid_utf8(str) if str.respond_to?(:force_encoding) - str = str.encode("ASCII-8BIT", :invalid => :replace, + str.force_encoding('UTF-8') + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8") + end end str end - - def repository_field_tags(form, repository) + + def repository_field_tags(form, repository) method = repository.class.name.demodulize.underscore + "_field_tags" send(method, form, repository) if repository.is_a?(Repository) && respond_to?(method) && method != 'repository_field_tags' end diff --git a/app/views/repositories/_dir_list_content.rhtml b/app/views/repositories/_dir_list_content.rhtml index 925dc38a9..fd9dd7afc 100644 --- a/app/views/repositories/_dir_list_content.rhtml +++ b/app/views/repositories/_dir_list_content.rhtml @@ -1,25 +1,27 @@ <% @entries.each do |entry| %> <% tr_id = Digest::MD5.hexdigest(entry.path) depth = params[:depth].to_i %> +<% ent_path = replace_invalid_utf8(entry.path) %> +<% ent_name = replace_invalid_utf8(entry.name) %>