Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Функция убирает все тэги из строки  [new]
Natalochka
Member

Откуда:
Сообщений: 5
Нужна функция, которая убирает все тэги из строки.

Пример:
exec dbo.strip_tags '<br>При</br>ве<a>т</a>'
функция возвращает : Привет

мой текст функции:

CREATE FUNCTION strip_tags  (@Str varchar(max))
 RETURNS varchar(max)
as
BEGIN
  DECLARE  @iStart int, @iEnd int, @iLength int
  WHILE CHARINDEX('<',@Str) > 0 And CHARINDEX( '>', @Str, CHARINDEX('<',@Str)) > 0 
    BEGIN 
      set @iStart = CHARINDEX('<',@Str) 
	  set @iEnd = CHARINDEX ( '>', @Str, CHARINDEX('<',@Str) )  
      set @iLength = ( @iEnd - @iStart) + 1
      IF @iLength > 0 
        BEGIN 
		  set @iStart = SUBSTRING(@Str,@iLength,Len(@Str)) 
		  set @Str = @iStart
         End
     END 
  RETURN @Str    
END

вызываю её exec dbo.strip_tags '<br>При</br>ве<a>т</a>'

Функция отрабатывает, но не выдает ничего.

Подскажите ошибки, заранее благодарю.

Сообщение было отредактировано: 28 апр 17, 13:31
28 апр 17, 13:26    [20443537]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Natalochka,

я удивлён
set @Str = @iStart
28 апр 17, 13:32    [20443559]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
Natalochka
Нужна функция, которая убирает все тэги из строки.
declare @x xml = '<br>При</br>ве<a>т</a>';
select @x.value('data(/)', 'varchar(max)');
28 апр 17, 13:34    [20443565]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
invm,
логично, но в контексте вопроса автора всё же
DECLARE @Str varchar(max)='<br>Pri</br>ve<a>t</a>'

  DECLARE  @iStart int, @iEnd int, @iLength int
  WHILE CHARINDEX('<',@Str) > 0 And CHARINDEX( '>', @Str, CHARINDEX('<',@Str)) > 0 
    BEGIN 
      set @iStart = CHARINDEX('<',@Str) 
	  set @iEnd = CHARINDEX ( '>', @Str, CHARINDEX('<',@Str) )  
      set @iLength = ( @iEnd - @iStart) + 1
      IF @iLength > 0 
        BEGIN 
		  set @Str = SUBSTRING(@Str,1,@iStart-1) + SUBSTRING(@Str,@iEnd+1,LEN(@str))
         End
     END 
select @Str    
28 апр 17, 13:41    [20443589]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
Rankatan
Member

Откуда:
Сообщений: 250
declare @xml xml= '<br>При</br>ве<a>т</a>'
select @xml.value('.','varchar(max)')
28 апр 17, 13:52    [20443642]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
rnk
Member

Откуда:
Сообщений: 126
TaPaK,
Вот это ещё круче:
set @iStart = SUBSTRING(@Str,@iLength,Len(@Str)) 

У меня оно вылетает на раз с сообщением:
Conversion failed when converting the varchar value '>При</br>ве<a>т</a>' to data type int.

invm,
Не факт, что на вход будет подан валидный XML. Обычно код HTML-страничек очень «грязный» и не читается XML-парсерами.

Грамотно было бы отсчитывать угловые скобки, чтобы <aaa<bbb>ccc> превращалось в пустую строку, а не в "ccc>". Ещё надо отдельно обрабатывать комменты и CDATA, надо что-то рещать с entities (например, &), в общем, развлекухи немало. Лучше бы подключить CLR-функцию с регулярными выражениями, или можно вообще через OLE Automation создать объект MSHTML.HTMLDocument, загрузить в него HTML и прочитать свойство innerText.
28 апр 17, 13:54    [20443649]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
Natalochka
Member

Откуда:
Сообщений: 5
Шыфл,
Спасибо!
28 апр 17, 14:30    [20443833]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
Natalochka
Member

Откуда:
Сообщений: 5
Всем спасибо за помощь!
28 апр 17, 14:31    [20443838]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
,
Guest
declare @RegEx int
declare @hr int
declare @Source varchar(8000)='<a><br>При</br>ве<a>т</a><h1> Hi !</h2>'
declare @Result varchar(8000)

exec @hr=sp_OACreate 'vbscript.regexp', @RegEx output

exec @hr=sp_OASetProperty @RegEx, 'Pattern', '<!*[^<>]*>'    -- html tags and comments 
exec @hr=sp_OASetProperty @RegEx, 'Global', 1
exec @hr=sp_OASetProperty @RegEx, 'IgnoreCase', 1
exec @hr=sp_OASetProperty @RegEx, 'MultiLine', 1

exec @hr=sp_OAMethod @RegEx, 'Replace', @Result output, @Source, '' 

select @Result

exec @hr=sp_OADestroy @RegEx
28 апр 17, 14:35    [20443852]     Ответить | Цитировать Сообщить модератору
 Re: Функция убирает все тэги из строки  [new]
user89
Member

Откуда:
Сообщений: 2083
Удалить символы из строки по шаблону 12231849
28 апр 17, 18:57    [20444918]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить