STRING_ESCAPE json слеш - PullRequest
       7

STRING_ESCAPE json слеш

0 голосов
/ 09 января 2019

Используя найденную функцию STRING_ESCAPE здесь Я экранирую некоторые столбцы со строковыми значениями, чтобы они соответствовали формату JSON. Однако, когда он применяется к URL-адресам, он ведет себя, на мой взгляд, странно.

SELECT STRING_ESCAPE('https://www.website.com/page', 'json')

возвращает https:\/\/www.website.com\/page.

Я могу понять, что в соответствии с этот пост разрешает прямую косую черту, не требуется в JSON, и поэтому они включаются при использовании этой функции. Но если вы создаете тег HTML с этим значением (https:\/\/www.website.com\/page), ссылка больше не работает, поскольку, по крайней мере, мой браузер пытается перейти на https://www.website.com//page.

Поскольку я не знаю, содержит ли моя исходная строка \/, я не могу просто использовать REPLACE(STRING_ESCAPE([column], 'json'), '\/', '/') для решения этой проблемы.

Есть ли возможность отключить экранирование косой черты? Или любое другое умное решение этой проблемы?

1 Ответ

0 голосов
/ 17 января 2019

Я не знаю ни одной опции для отключения экранирования от прямой косой черты, но если вы ищете идеи для обходного пути, вы можете заменить косую черту на какое-то фиктивное значение, затем выполнить экранирование, а затем восстановить прямую косую черту с помощью замена фиктивных значений косыми чертами.

Думая примерно так:

DECLARE @replace_value VARCHAR(36) = NEWID();
SELECT 
    STRING_ESCAPE('https://www.website.com/page', 'json'),
    REPLACE(STRING_ESCAPE(REPLACE('https://www.website.com/page', '/', @replace_value), 'json'), @replace_value, '/');

Не самая красивая, но может выполнить работу.

...