I was in need of a function that replaces non-English characters with English alphabet equivalents and I found one in the net. I only needed to fill in blanks and it was good to go. Except not.
Function Remove-SpecialCharacters {
[CmdletBinding()]
Param(
[Parameter(
Mandatory = $true,
Position = 1,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true
)]
[Alias("Input")]
[string] $InputString
)
Begin {}
Process {
$InputString = $InputString.Replace(' ','')
$InputString = $InputString.Replace('á','a')
$InputString = $InputString.Replace('Á','A')
$InputString = $InputString.Replace('à','a')
$InputString = $InputString.Replace('À','A')
$InputString = $InputString.Replace('â','a')
#$InputString = $InputString.Replace('Â','A')
$InputString = $InputString.Replace('ä','a')
$InputString = $InputString.Replace('Ä','A')
$InputString = $InputString.Replace('å','a')
$InputString = $InputString.Replace('Å','A')
$InputString = $InputString.Replace('Æ','AE')
$InputString = $InputString.Replace('æ','ae')
$InputString = $InputString.Replace('ã','a')
$InputString = $InputString.Replace('Ã','A')
$InputString = $InputString.Replace('ç','c')
$InputString = $InputString.Replace('é','e')
$InputString = $InputString.Replace('É','E')
$InputString = $InputString.Replace('è','e')
$InputString = $InputString.Replace('È','E')
$InputString = $InputString.Replace('ê','e')
$InputString = $InputString.Replace('Ê','E')
$InputString = $InputString.Replace('ë','e')
$InputString = $InputString.Replace('Ë','E')
$InputString = $InputString.Replace('í','i')
$InputString = $InputString.Replace('Í','I')
$InputString = $InputString.Replace('ì','i')
$InputString = $InputString.Replace('Ì','I')
$InputString = $InputString.Replace('î','i')
$InputString = $InputString.Replace('Î','I')
$InputString = $InputString.Replace('ï','i')
$InputString = $InputString.Replace('Ï','I')
$InputString = $InputString.Replace('ñ','n')
#$InputString = $InputString.Replace('Ñ','N')
$InputString = $InputString.Replace('ó','o')
$InputString = $InputString.Replace('Ó','O')
$InputString = $InputString.Replace('ò','o')
#$InputString = $InputString.Replace('Ò','O')
$InputString = $InputString.Replace('ô','o')
$InputString = $InputString.Replace('Ô','O')
$InputString = $InputString.Replace('ö','o')
$InputString = $InputString.Replace('Ö','O')
$InputString = $InputString.Replace('õ','o')
$InputString = $InputString.Replace('Õ','O')
$InputString = $InputString.Replace('ø','O')
$InputString = $InputString.Replace('Ø','o')
$InputString = $InputString.Replace('ú','u')
$InputString = $InputString.Replace('Ú','U')
$InputString = $InputString.Replace('ù','u')
$InputString = $InputString.Replace('Ù','U')
$InputString = $InputString.Replace('û','u')
$InputString = $InputString.Replace('Û','U')
$InputString = $InputString.Replace('ü','u')
$InputString = $InputString.Replace('Ü','U')
$InputString = $InputString.Replace('ý','y')
$InputString = $InputString.Replace('Ý','Y')
$InputString = $InputString.Replace('ð','')
$InputString = $InputString.Replace('Ð','')
$InputString = $InputString.Replace('þ','')
$InputString = $InputString.Replace('Þ','')
$InputString = $InputString.Replace('ß','')
$strOutput = [System.Text.RegularExpressions.Regex]::Replace($InputString,"[^0-9a-zA-Z_]","")
Write-Output $strOutput
}
End {}
}
The lines that have been commented out are giving me trouble. The weird thing is that this seems to only occur on these uppercase letters, lowercase letters that come right before them are working fine.
The errors are as follows
Missing ')' in method call.
At function.ps1:21 char:45
+ $InputString = $InputString.Replace('Ã'',' <<<< A')
+ CategoryInfo : ParserError: (CloseParenToken:TokenId) [], ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisInMethodCall
The string starting:
At function.ps1:75 char:42
+ $InputString = $InputString.Replace('ÃY <<<< ','')
is missing the terminator: '.
At function.ps1:81 char:2
+ } <<<<
+ CategoryInfo : ParserError: (,'')
$st...
}
End {}
}:String) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
The string starting:
At function.ps1:77 char:91
+ $strOutput = [System.Text.RegularExpressions.Regex]::Replace($InputString,"[^0-9a-zA-Z_] <<<< ","")
is missing the terminator: ".
At function.ps1:81 char:2
+ } <<<<
+ CategoryInfo : ParserError: (,`")
Write-O...
}
End {}
}:String) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
Anyone have any ideas as to why this is happening and how to fix? Thank you very much.