This C# function to remove any special characters in the input string which is not included in the allowed special character list.

/// <summary>
/// Removes any special characters in the input string not provided
/// in the allowed special character list.
///
/// Sometimes it is required to remove some special characters like
/// carriage return, or new line which can be considered as invalid
/// characters, especially while file processing. This method removes any
/// special characters in the input string which is not included in the
/// allowed special character list.
/// </summary>
/// <param name="input">Input string to process</param>
/// <param name="allowedCharacters">list of allowed special characters </param>
/// <returns>
/// The original string with special charactersremoved.
/// </returns>
/// <example>
///
/// Remove carriage return from the input string:
///
///     var processedString = RemoveSpecialCharacters(
///         "Hello! This is string to process. \r\n", @""",-{}.! "
///     );
///
/// </example>
/// <remarks>
/// http://extensionmethod.net/5470/csharp/string/removespecialcharacters
/// </remarks>
public static string RemoveSpecialCharacters(string input, string allowedCharacters)
{
    char[] buffer = new char[input.Length];
    int index = 0;

    char[] allowedSpecialCharacters = allowedCharacters.ToCharArray();

    foreach (char c in input.Where(
        c => char.IsLetterOrDigit(c) || allowedSpecialCharacters.Any(
            x => x == c)
    ))
    {
        buffer[index] = c;
        index++;
    }

    return new string(buffer, 0, index);
}

// or...

public static string RemoveSpecialCharacters(this string self)
{
    if (self == null)
    {
        return null;
    }

    var sb = new StringBuilder();

    foreach (var c in self)
    {
        if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == '_' || c == '-' || c == ' ')
        {
            sb.Append(c);
        }
    }

    return sb.ToString();
}