The problem is that a simple replacement clears every character , even if it is spared (doubled). Here are the functions that I created for my use:
- which removes only orphan quotes.
- which eludes them
I also made them generalized to control other characters, with optionnal $ charToReplace
#Replaces single occurences of characters in a string. #Default is to replace single quotes Function RemoveNonEscapedChar { param( [Parameter(Mandatory = $true)][String] $param, [Parameter(Mandatory = $false)][String] $charToReplace ) if ($charToReplace -eq '') { $charToReplace = "'" } $cleanedString = "" $index = 0 $length = $param.length for ($index = 0; $index -lt $length; $index++) { $char = $param[$index] if ($char -eq $charToReplace) { if ($index +1 -lt $length -and $param[$index + 1] -eq $charToReplace) { $cleanedString += "$charToReplace$charToReplace" ++$index ## /!\ Manual increment of our loop counter to skip next char /!\ } continue } $cleanedString += $char } return $cleanedString } #A few test cases : RemoveNonEscapedChar("'st''r'''i''ng'") #Echoes st''r''i''ng RemoveNonEscapedChar("""st""""r""""""i""""ng""") -charToReplace '"' #Echoes st""r""i""ng RemoveNonEscapedChar("'st''r'''i''ng'") -charToReplace 'r' #Echoes 'st'''''i''ng'
#Escapes single occurences of characters in a string. Double occurences are not escaped. eg ''' will become '''', NOT ''''''. #Default is to replace single quotes Function EscapeChar { param( [Parameter(Mandatory = $true)][String] $param, [Parameter(Mandatory = $false)][String] $charToEscape ) if ($charToEscape -eq '') { $charToEscape = "'" } $cleanedString = "" $index = 0 $length = $param.length for ($index = 0; $index -lt $length; $index++) { $char = $param[$index] if ($char -eq $charToEscape) { if ($index +1 -lt $length -and $param[$index + 1] -eq $charToEscape) { ++$index ## /!\ Manual increment of our loop counter to skip next char /!\ } $cleanedString += "$charToEscape$charToEscape" continue } $cleanedString += $char } return $cleanedString } #A few test cases : EscapeChar("'st''r'''i''ng'") #Echoes ''st''r''''i''ng'' EscapeChar("""st""""r""""""i""""ng""") -charToEscape '"' #Echoes ""st""r""""i""ng"" EscapeChar("'st''r'''i''ng'") -charToEscape 'r' #Echoes 'st''rr'''i''ng'
Balmipour
source share