c ++ - экранировать специальные символы - PullRequest
0 голосов
/ 14 сентября 2010

Мне нужно экранировать все специальные символы, заменить национальные символы и получить «простой текст» для имени таблицы.

string getTableName(string name)

Моя строка может быть "šárka65 _% &." иЯ хочу получить строку, которую могу использовать в своей базе данных в качестве имени таблицы.

1 Ответ

2 голосов
/ 14 сентября 2010

Какая СУБД?

  • В стандартном SQL имя, заключенное в двойные кавычки, является идентификатором с разделителями и может содержать любые символы.
  • В MS SQL Server имя, заключенное вквадратные скобки - это идентификаторы с разделителями.
  • В MySQL имя, заключенное в обратные метки, является идентификатором с разделителями.

Можно просто заключить имя в соответствующие маркеры.

У меня было чувство, что это не то, что вы хотели ...

В каком наборе кодов находится ваша строка?Похоже, это UTF-8 к тому времени, когда он попадает в мой браузер.Нужно ли вам иметь возможность однозначно инвертировать отображение?Это сложнее.

Вы можете использовать множество схем для отображения информации:

  • Один простой способ - просто закодировать все с помощью маркера (X)для защиты от начальных цифр:

    XC5A1C3A1726B6136355F25262E
    
  • Один чуть менее простой способ заключается в шестнадцатеричном кодировании всего, что не является алфавитно-цифровым или подчеркиванием ASCII.

    XC5A1C3A1rka65_25262E
    
  • Или, как следует из комментария, вы можете разработать таблицу сопоставления для акцентированных латинских букв - действительно, таблица сопоставления, должным образом инициализированная, будет самым быстрым подходом.Ввод - это символ в исходной строке;вывод - требуемый сопоставленный символ или символы.Если вы используете 8-битный набор символов, это полностью управляемо.Если вы используете полный Юникод, это намного менее управляемо (не в последнюю очередь, как вы сопоставляете все сланские слова Хана с ASCII?).

  • Или ...

...