Невозможно заменить строку в Swift - PullRequest
0 голосов
/ 18 октября 2018

Попытка экранировать несколько специальных символов строки для отправки через xml api.

Попробовал нижеприведенный код, но не работает для всех вхождений Single Quote (') и Double Quote (")

var strToReturn = "“Hello” ‘world’"
strToReturn = strToReturn.replacingOccurrences(of: "&", with: "&")
strToReturn = strToReturn.replacingOccurrences(of: "<", with: "&lt;")
strToReturn = strToReturn.replacingOccurrences(of: ">", with: "&gt;")
strToReturn = strToReturn.replacingOccurrences(of: "‘", with: "&apos;")
strToReturn = strToReturn.replacingOccurrences(of: "“", with: "&quot;") 

print("Replaced string : \(strToReturn)") 

Результат &quot;Hello” &apos;world’

Если кто-нибудь может помочь, спасибо!

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Если вы напечатаете ascii-значения строки, вы увидите, что кавычки - это не один и тот же символ Юникода.Поэтому убедитесь, что вы используете один и тот же символ Unicode или обрабатывает оба случая

strToReturn.characters.map{print($0, "\(String($0.unicodeScalars.first!.value, radix: 16, uppercase: true))")}

“ 201C
H 48
e 65
l 6C
l 6C
o 6F
” 201D
  20
‘ 2018
w 77
o 6F
r 72
l 6C
d 64
’ 2019
0 голосов
/ 18 октября 2018

Причина этого в том, что отличается от , а отличается от .Поэтому вам нужно добавить эти строки тоже.

strToReturn = strToReturn.replacingOccurrences(of: "’", with: "&apos;")
strToReturn = strToReturn.replacingOccurrences(of: "”", with: "&quot;") 

Это даст вам ожидаемый результат

0 голосов
/ 18 октября 2018

Ваш код отлично работает со мной.Я только что изменил strings, как упомянул в комментариях:

Для всех, кто интересуется, как генерируются одинарные и двойные кавычки внутри строк --- Удерживая нажатой клавишу alt / option, нажмите Square / Curlyскобочные клавиши

Просто измените буквы, используя комбинацию клавиш, и все будет работать

enter image description here

0 голосов
/ 18 октября 2018

Вам необходимо указать замещающие строки для и , поскольку ’ != ‘ и ” != “

var strToReturn = "“Hello” ‘world’"
strToReturn = strToReturn.replacingOccurrences(of: "&", with: "&amp;")
strToReturn = strToReturn.replacingOccurrences(of: "<", with: "&lt;")
strToReturn = strToReturn.replacingOccurrences(of: ">", with: "&gt;")
strToReturn = strToReturn.replacingOccurrences(of: "‘", with: "&apos;")
strToReturn = strToReturn.replacingOccurrences(of: "“", with: "&quot;")
strToReturn = strToReturn.replacingOccurrences(of: "’", with: "&apos;")
strToReturn = strToReturn.replacingOccurrences(of: "”", with: "&quot;") 
...