Replace

ASP

23 svar · 403 visningar · startad av qwerty

Medlem sedan jan. 2001391 inlägg
Trådstart#1

Varför byter inte denna kod ut de fula orden?

<%
a=Request.Form("textfield")
Application("BadWords") = "Skit Fan Helvete"

strBadWords = Application("BadWords")
arrBadWords = Split(StrBadWords)
For I = LBound(arrBadWords) To UBound(arrBadWords)
strString = Replace (strString,arrBadWords(I),"*****")
Next
%>
<% =a%>
Medlem sedan mars 20002 836 inlägg
#2

... därför att strString är tom enligt koden du visar. Antar att det du vill kolla är strängen som finns i variabeln a. Byt a mot strString så kommer det nog att funka =P

cya,
PatrikB

Medlem sedan juni 200032 967 inlägg
#3

vad är strString? när skapar du den? är det inte innehållet i a du ska censurera?

Medlem sedan juni 200032 967 inlägg
#4

håll käften, patrikb! ;)

Medlem sedan mars 20002 836 inlägg
#5

he, he ... hann före @nders för en ggns skull :)

Medlem sedan jan. 2001391 inlägg
#6

Koden ser nu ut så här:


<%

Application("BadWords") = "Skit Fan Helvete"
strString=Request.Form("textfield")
strBadWords = Application("BadWords")
arrBadWords = Split(StrBadWords)
For I = LBound(arrBadWords) To UBound(arrBadWords)
strString = Replace (strString,arrBadWords(I),"*****")
Next
%>
<% =strString%>

...men den funkar fortfarande inte. Skriver ut fan och de andra orden.
Nån som vet felet?

Medlem sedan mars 20002 836 inlägg
#7

Ändra din Application med badword till:

Application("BadWords") = "skit fan helvete"

Sedan ändrar du i själva replacen:

strString = Replace (LCase(strString),arrBadWords(I),"*****")

borde göra susen ...

cya,
PatrikB

Medlem sedan juni 200032 967 inlägg
#8

du vet om att du gör en case sensitive replace, antar jag.

själva koden fungerar nämligen utmärkt.

Medlem sedan juni 200032 967 inlägg
#9

patrikb, vad har jag sagt? ;)

fast problemet med din kod är ju att den resulterande strängen blir lower case.

jag hade nog använt regexp till detta.

Medlem sedan mars 20002 836 inlägg
#10

jepp, vet att den ändrar allt till LowerCase.
Skulle nog oxå använt mig av RegExp ... fast där är man lite lost så att säga ... men jobbar på den saken =P

Har för mig att Vide har en bra artikel om RegExp

cya,
PatrikB

Medlem sedan mars 20002 836 inlägg
#11

... he, he ... fixade till en liten funktion med regext =P

Function checkBadWord(StringToCheck)
	Dim objRegExp, match, matches
	
	Set objRegExp = New RegExp
		objRegExp.Global = True
		objRegExp.IgnoreCase = true
		'## -- byt ut fan, skit, helvet under så att det passar
		'##    dina fula ord. Tänk på att det måste avgränsas med
		'##    pipe och inget annat ... tror jag =P
		objRegExp.Pattern = "(fan&#0124;skit&#0124;helvete)"
		Set matches = objRegExp.Execute(StringToCheck)
			For Each match In matches
				StringToCheck = Replace(StringToCheck,match,"*****")
			Next
		Set matches = Nothing
	Set objRegExp = Nothing
	checkBadWord = StringToCheck
End Function

Med qwertys exempel:

strString = Request.Form("textfield")
Response.Write checkBadWord(strString)

hoppas nu att den funkar ... ;o

cya,
PatrikB

Medlem sedan jan. 2001391 inlägg
#12

Tack alla!
det funkar.

...om jag skulle vilja utveckla funktionen och lägga alla de små fula orden i en databas eller i en textfil. Hur skulle man gå till väga då?

Alltså att man lägger upp alla "bad words" och ett ersättningsord för alla.
tex
helvete - helsefyr
jävlar - järnspikar osv.

...för det måste väl vara ett effektivare sätt eller?

Medlem sedan mars 20002 836 inlägg
#13

visst kan man göra det.
Vet inte hur prestandan blir men funkar gör det:

Function checkBadWord(StringToCheck)

Dim objRegExp, match, matches, arrPattern, I

	Set objRegExp = New RegExp
		objRegExp.Global = True
		objRegExp.IgnoreCase = true

		arrPattern = Split(Application("BadWords"))

		For I = LBound(arrPattern) TO UBound(arrPattern)

			objRegExp.Pattern = arrPattern(I)

			Set matches = objRegExp.Execute(StringToCheck)

				For Each match In matches

					StringToCheck = Replace(StringToCheck,match,"*****")

				Next

			Set matches = Nothing

		Next

	Set objRegExp = Nothing

	checkBadWord = StringToCheck

End Function

Som du ser så splittar jag upp Application objektet till en array och loopar genom arrayen och kör en match för varje värde i arrayen.

cya,
PatrikB

Medlem sedan jan. 2001391 inlägg
#14

kanske är jag knäpp
...men var placerar jag listan med de "fula orden".

Medlem sedan jan. 2001391 inlägg
#15

Det löste sig!

Och för ni som är lika dumma som mig:

Man läser in textfilen i application!

man lär sig något varje dag...

Medlem sedan mars 20002 836 inlägg
#16

... och den inläsningen bör ske i global.asa's Sub Application_OnStart ...

Annars gör man en global variabel av alla badwords separerade med mellanslag som sedan inkluderas på alla sidor där badword checken ska vara.

cya,
PatrikB

Medlem sedan jan. 2001391 inlägg
#17

..men om man bara har badwordchecken på en enda sida kan man väl bara läsa in "ordlistan" där?

Förresten: Ingen som vet var man kan hitta en lista över svordomar och liknande fula ord?

Medlem sedan jan. 2001391 inlägg
#18

checka ut detta:

jag har lagt en massa fula ord i en textfil åtskiljda av mellanslag. Allt fukar ända tills man kommer till en svordom som innehåller åäö. Då står det där "jävla"-ordet kvar. Hur ska jag göra för att den ska ersätta även de ord som innehåller ä. Har försök lägga in orden html-formaterade i ordlistan (jävlar), men det hjälpte inte. Tacksam för tips.

Medlem sedan mars 20002 836 inlägg
#19

hur har du sparat texten i filen?

cya,
PatrikB

Medlem sedan jan. 2001391 inlägg
#20

jag har bara skrivit alla ord i en lång rad i en textfil med "skriv text". Helt rent från taggar och annat.

372 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
118 ms — deklarationer (db)
119 ms — hämta statistik (db)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)