[ Rockovic @ 03.12.2007. 07:53 ] @
Trebao bih da zamenim sve pojave znakova "<" ">" u textu sa "&lt;" i "&gt;". Problem je sto sve pojave "<b/>" i "<b>neki text</b>" tagova moraju ostati kakvi jesu. Oni bi trebali da formatiraju text kako vec i rade - <br/> kao novi red a <b>Bold</b>.

Znaci "nesto je < od neceg" bi treblo da mi izgleda u textu: "nesto je &lt od neceg" ali "<b>Naslov</b>" bi trebao da bude formatiran kako i sledi: Naslov

Imate li mozda neki slican RegExp pattern pri ruci?

Hvala u napred!
[ jablan @ 03.12.2007. 08:16 ] @
Imaš samo B tagove ili još neke?
[ Rockovic @ 03.12.2007. 09:27 ] @
U pitanju su samo <b>, <br> i <br/>

Kad bih mogao nekako zameniti sve < ili > sa "&lt;" i "&gt;" a da nisu u sklopu <b>, </b> i <br/>. Kako samo zvuci jednostavno kad covek ovako formulise =)...

Znaci (pseudokod): Replace sve "<" ili ">" sa "&lg;" ili "&gt;" ALI da nisu u pitanju "<b>,</b>,<br/>,<br>"



[Ovu poruku je menjao Rockovic dana 03.12.2007. u 10:45 GMT+1]
[ jablan @ 03.12.2007. 09:58 ] @
Evo kako bih ja uradio, verovatno postoji efikasnije rešenje:
Ovo je search pattern:
Code:
(</?b>)|(<br/?>)|(<|>)

Za replacement napravi MatchEvaluator delegat koji će da vraća prvu i drugu match grupu neizmenjene, a treću HTTP encoduje ako je pronađena.

http://msdn2.microsoft.com/en-us/library/cft8645c(VS.80).aspx
[ Rockovic @ 03.12.2007. 19:05 ] @
Nisam imao prilike da pogledam odgovore ranije. @jablan, moram priznati da nisam bas razumeo tvoj predlog. Problem je sto bi korisnik mogao napisati i "3<4" ali i "3 < 4". Cini mi se da tvoj primer ne uzima taj slucaj u obzir... ili?
[ jablan @ 03.12.2007. 21:11 ] @
Koji slučaj? Nema veze da li ima spejsove okolo, pattern koji sam ti predložio jednostavno ignoriše spejsove.

Probaj da napraviš ovako kako sam ti rekao. Ili mi sredi švedsku vizu, pa ću ja da ti napravim... ;)
[ Rockovic @ 03.12.2007. 22:26 ] @
Nemam kuci VS tako da sam radio sa asp.net u vb-u. u Visual Web Developer-u. Jos nisam testirao kako treba tako da nisam bas siguran da li je skroz ok. Ovako na brzinu mi se cini da je to to sto mi treba.

Bio bih zahvalan ako i neko od vas iskusnijih testira pattern.



Code:

   Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
      MyBase.OnLoad(e)

      Dim text As String = "<b>Debeli</b> < text > <br/>novi red <br />novi red < <check <b>Debeli</b>"

      Dim rxLt As New Regex("(\s?<[^b(br)/<>]\s?)|(\s?[^b(br)/<>]>\s?)")
      Dim result As String = rxLt.Replace(text, AddressOf CorrectLessGreaterThenChar)

      Response.Write(result)

   End Sub

   Function CorrectLessGreaterThenChar(ByVal m As Match) As String
      Dim x As String = m.ToString()
      Dim s As New String("")

      If x.IndexOf(">") > -1 Then
         s = x.Replace(">", "&gt;")
      ElseIf x.IndexOf("<") > -1 Then
         s = x.Replace("<", "&lt;")
      ElseIf s = "" Then
         s = x
      End If

      Return s
   End Function
[ Rockovic @ 03.12.2007. 22:32 ] @
Kasno videh ovo za vizu... Da dobijes vizu ovde su otprilike verovatne kao i recimo mogucnest da budes zet svedskom kralju...
[ jablan @ 04.12.2007. 08:14 ] @
Ne valja ti pattern. Ne znam zašto jer ne kapiram šta si hteo, ali definitivno ne nalazi sve što treba.

Probaj ovako kako sam ti ja rekao, ili sačekaj do večeras, okačiću kod. Preživeću i bez švedske vize... :P
[ mmix @ 04.12.2007. 11:05 ] @
A sto jednostavno ne probas sa HttpUtility.HtmlEncode(string)?

Ako se ne varam (ne mogu da proverim trenutno) HttpUtility.HtmlEncode("<b> vidi ovo <= vidi ono</b>"); bi trbalo da vrati "<b> vidi ovo &lt;= vidi ono</b>"

PS A to za zeta svedskog kralja, to zavisi od toga kak'a mu cera
[ jablan @ 04.12.2007. 12:07 ] @
Citat:
mmix: A sto jednostavno ne probas sa HttpUtility.HtmlEncode(string)?

Nope, ta metoda ne zna za pojam tagova, enkoduje sve redom.

Ok, evo ga rešenje na tacni:
Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;

namespace ConsoleApplication5
{
    class Program
    {
        static string ME(Match m)
        {
            if (m.Groups[3].Value != "")
                return HttpUtility.HtmlEncode(m.Value);
            return m.Value;
        }

        static void Main(string[] args)
        {
            string s = "asdf SAD<F asdf AS>Df asdf asdF< ASdf asdf<br> safd aDF< sadf</b> sd FASDF asD<F asdf<br/> >SAdf asdf as";
            Regex re = new Regex("(</?b>)|(<br/?>)|(<|>)");
            string r = re.Replace(s, new MatchEvaluator(ME));
            Console.WriteLine(r);
        }
    }
}
[ Rockovic @ 04.12.2007. 18:02 ] @
Jos jednom hvala na vasem vremenu i trudu.

@jablan, probacu code cim stignem! Da @mmix, na htmlencode sam i ja pomisljao...

Nego, gde @jablane vidis gresku u kodu koji sam ja poslao. Meni je nalazilo (zamenjivalo) sinoc bas ono sto mi treba. Doduse (kako rekoh) nisam bas pazljivo testirao ali cini mi se ok...

@mmix sto se tice princeze (ovde sam pre svega mislio na mladju) ona bi mogla definitivno proci kao one iz bajke sto celu situaciju cini jos komplikovanijom...

Evo ovde su obadve mada ova o kojoj ja pisem je prva sa leva...

[ jablan @ 04.12.2007. 19:34 ] @
Citat:
Rockovic: Nego, gde @jablane vidis gresku u kodu koji sam ja poslao. Meni je nalazilo (zamenjivalo) sinoc bas ono sto mi treba. Doduse (kako rekoh) nisam bas pazljivo testirao ali cini mi se ok...

Nisam se udubljivao u kod, previše mi je komplikovano a ne troši mi se mozak zabadava ;), probao sam na par primera i video da ne nalazi sve znakove. Najprostije, probaj na stringu "<", videćeš da ga pattern neće pronaći.
[ Rockovic @ 04.12.2007. 19:41 ] @
@jablan, moj kod menja sve pojave "<" ili ">" u test stringu ako nisu u sklopu <br>, <br /> ili <b></b>... Dakle sve u test-string-u u metodi kod uspesno zameni... npr. <check < text >... "<" mi je i bilo jednostavno testirati... Zato mi nije jasno na koje slucajeve mislis.
[ jablan @ 04.12.2007. 20:20 ] @
Ne razumem te, a izgleda ni ti mene... Ako ti tvoj kod radi posao, koristi ga. :)