Parts have no concept of Name and DisplayName, only Name, and this is already filtered for special characters. DisplayName is derived from Name dynamically on the fly when it is needed. Nothing to do here.
Fields also only have a name, no display name, but we were not filtering on special characters. We now do, just like parts.
@bleroy created: https://orchard.codeplex.com/workitem/16855
The dashes make it impossible to override the rendering of a custom type.
Instead of "Book Review" to be identified by "Book-Review" it should be "BookReview".
Louis just confirmed the problem.