Функция udf_StripHTML в sql заменяет некоторые буквы в тексте на вопросик(?)

Есть текст с html тегом и я пытаюсь из него извлеч строку используя sql функцию udf_StripHTML:

var htmlContent = "<b>Новости / Жаңалықтар </b>";
var content = DB.udf_StripHTML(htmlContent);

И функция udf_StripHTML(text) вернёт мне так:

Новости / Жа?алы?тар

заменяя некоторые буквы на ? , как можно решить эту проблему?


Ответы (1 шт):

Автор решения: niz_sh

Проблема была в том что в sqlфункция udf_StripHTML принимала и возвращала VARCHAR. Чтобы решить нужно поменять на NVARCHAR:

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText NVARCHAR(MAX))
RETURNS NVARCHAR(MAX) AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
    WHILE @Start > 0 AND @End > 0 AND @Length > 0
    BEGIN
        SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
        SET @Start = CHARINDEX('<',@HTMLText)
        SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
        SET @Length = (@End - @Start) + 1
    END
    RETURN LTRIM(RTRIM(REPLACE(@HTMLText, '&nbsp;', ' ')));
END
GO

таким образом метод правильно возвращает текст:

Новости / Жаңалықтар
→ Ссылка