2013-05-07 11 views
6

Moi użytkownicy czasami wpisują zamiast apostrofów (') symbole, które wyglądają jak apostrof (), co powoduje pewne problemy z bazą danych.Zastąp pojedyncze apostrofy apostrofem w ciągu (ruby)

Próbowałem zastąpić je gsub tak:

result.gsub(/\‘/, "'") 
result.gsub(/‘/, "'") 

Żadna z tych opcji nie działa - Pierwsze błąd:

syntax error, unexpected $end, expecting ')' 
    return result.gsub(/\‘/, "'").gsub("’", "'") 
         ^

Są one zarezerwowane przez Ruby? Jak je wymienić?

+2

który wersja ruby ​​robi używasz? – Mattherick

+0

1.9.2 - ponieważ Heroku go używa –

+0

result = "'helle" " result.gsub (/ \' /," '") .gsub ("' "," '") nieprawidłowy znak wielobajtowy (UTF-8) błąd składni, nieoczekiwany koniec $, oczekiwanie ")". musi to być problem z kodowaniem. – Mattherick

Odpowiedz

6

Jeśli edytor tekstu nie obsługuje znaków UTF-8 jak bezpośrednio, można uciec do nich w ten sposób:

"\u2018" 

Więc w swoim przykładzie, byłoby:

result.gsub(/\u2018/, "'") 
+2

Jeśli chcesz uzyskać lewy i prawy łańcuch cytatów, musisz to zrobić zamiast myString.gsub (/ [\ u2018 \ u2019] /, "'"). Ostatnio musiałem to zrobić z eksportem Windows XML dla aplikacji Rails. –

+0

skąd masz mapowanie dla '' 'is'" \ u2018 "'? Potrzebuję tego samego dla '' ô''. Proszę o pomoc. –

+0

Możesz znaleźć kodowany kod Unicode 'ô', patrząc na [tabelę Unicode] (http://unicode-table.com/en/search/?q=ô), która powie Ci, że jest to' U + 00F4'. W Ruby oznacza to, że musisz napisać '" \ u00F4 "'. – kiplantt

1

Spróbuj:

result.gsub("‘", "'") 

To powinno działać.

+0

To faktycznie powoduje błąd –

0

Oprócz tego, co powiedział @kiplantt, następujące działa również (po prostu przetestowane)

puts result.gsub(/(\`)/, "\\'") 
Powiązane problemy