Avatar billede loukas Mester
23. november 2002 - 23:35 Der er 29 kommentarer og
1 løsning

æ ø å ????

Jeg har hentet denne færdige kode på en anden side.
Den kan hente
META DESCRIPTION
META KEYWORDS
osv.
Problemt er æ, ø og å
den tager tilsyneladende bogstaver efter et æ,ø eller å
Prøv evt. her: http://www.istoria.dk/parse/parse/demo.asp



Koden:
clsHTMLParser.asp
' ------------------------------------------------------------------------------
Class clsHTMLParser
' ------------------------------------------------------------------------------
    Private mStrHTML
    Private mObjRegExp
    Private mObjMatches
    Private mObjMatch
    Public Title
    Public Keywords
    Public Description
' ------------------------------------------------------------------------------
    Public Property Let HTML(ByRef pStrHTML)
        mStrHTML = pStrHTML

        Set mObjRegExp = New RegExp
        mObjRegExp.IgnoreCase = True

        Call ParseTitle()
        Call ParseDescription()
        Call ParseKeywords()

        Set mObjMatch = Nothing
        Set mObjMatches = Nothing
        Set mObjRegExp = Nothing

    End Property
' ------------------------------------------------------------------------------
    Public Property Get HTML()
        HTML = mStrHTML
    End Property
' ------------------------------------------------------------------------------
    Private Sub ParseTitle()
        Title = ""
        mObjRegExp.Pattern = "<TITLE>([^<]*)</TITLE>"
        Set mObjMatches = mObjRegExp.Execute(mStrHTML)
        If mObjMatches.Count = 0 Then Exit Sub
        Title = mObjMatches.item(0).Value
        Title = Replace(Title, "<TITLE>", "", 1, -1, vbTextCompare)
        Title = Replace(Title, "</TITLE>", "", 1, -1, vbTextCompare)
    End Sub
' ------------------------------------------------------------------------------
    Private Sub ParseDescription()
        Description = ""
        mObjRegExp.Pattern = "<META[^>]+(name=""description""|content=""([^""]*)"")[^>]+(name=""description""|content=""([^""]*)"")[^>]*>"
        Set mObjMatches = mObjRegExp.Execute(mStrHTML)
        If mObjMatches.Count = 0 Then Exit Sub
        Description = mObjMatches.item(0).Value
        Description = Mid(Description, InStr(1, Description, "content=""", vbTextCompare) + 9)
        Description = Mid(Description, 1, InStr(1, Description, """", vbTextCompare) -1)
    End Sub
' ------------------------------------------------------------------------------
    Private Sub ParseKeywords()
        Keywords = ""
        mObjRegExp.Pattern = "<META[^>]+(name=""keywords""|content=""([^""]*)"")[^>]+(name=""keywords""|content=""([^""]*)"")[^>]*>"
        Set mObjMatches = mObjRegExp.Execute(mStrHTML)
        If mObjMatches.Count = 0 Then Exit Sub
        Keywords = mObjMatches.item(0).Value
        Keywords = Mid(Keywords, InStr(1, Keywords, "content=""", vbTextCompare) + 9)
        Keywords = Mid(Keywords, 1, InStr(1, Keywords, """", vbTextCompare) -1)
    End Sub
' ------------------------------------------------------------------------------
    Public Function GetURL(ByRef pStrURL)

        Dim lObjSpider
        Dim strText

        If pStrURL = "" Then Exit Function

        On Error Resume Next

        ' Different variations of XML objects
        'Set lObjSpider = Server.CreateObject ("MSXML2.XMLHTTP.3.0")
        'Set lObjSpider = Server.CreateObject ("MSXML2.ServerXMLHTTP")
        Set lObjSpider = Server.CreateObject ("Microsoft.XMLHTTP")
       

        ' Could not create Internet Control
        If Err Then
            GetURL = "Error: " & Err.Description
            Exit Function
        End If
       
        On Error Goto 0

        With lObjSpider
            .Open "GET", pStrURL, False, "", ""
            .Send
            GetURL = .ResponseText
        End With
        Set LobjSpider = Nothing

        HTML = GetURL
       
    End Function
' ------------------------------------------------------------------------------
End Class
' ------------------------------------------------------------------------------
%>


KODEN:
demo.asp

<!--#INCLUDE FILE="clsHTMLParser.asp"-->
<%
Dim StrURL
Dim StrHTML
Dim ObjParser

StrURL = Request.QueryString("URL")
%>
<H1>HTML Parser</H1>
<P>
    This script will request the page from the
    server specified in the URL and parse the
    Title, Description, and Keywords for you.
</P>
<FORM>
    <INPUT size="50" name="URL" value="<%=StrURL%>"><BR>
    <INPUT type="Submit" value="Parse">
</FORM>
<BR><BR>
<%
If Not StrURL = "" Then
    Set ObjParser = New clsHTMLParser
    With ObjParser
        StrHTML = .GetURL(StrURL)
        %>
        <TABLE border="1">
            <TR>
                <TD>Title</TD>
                <TD><%=.Title%></TD>
            </TR>
            <TR>
                <TD>Keywords</TD>
                <TD><%=.Keywords%></TD>
            </TR>
            <TR>
                <TD>Description</TD>
                <TD><%=.Description%></TD>
            </TR>
        </TABLE>
        <HR>
        <%
        Response.Write Replace(Server.HTMLEncode(StrHTML), vbCrLf, "<BR>")
    End With
    Set ObjParser = Nothing
End If
%>
Avatar billede justdoit Nybegynder
24. november 2002 - 00:48 #1
Prøv at sætte denne ind i toppen

<% session.LCID = 1030 %>
Avatar billede loukas Mester
24. november 2002 - 08:47 #2
Jeg har prøvet, og det virker ikke ;-(
Avatar billede neteffect Nybegynder
24. november 2002 - 10:37 #3
Erstat store og små æ-ø-å i teksten med andre tegn, fx zzz1 for æ, ZZZ1 for Æ, zzz2 for ø osv, og konvertér resultatet tilbage igen.
Avatar billede loukas Mester
24. november 2002 - 13:50 #4
OK <--neteffect
Hvordan ?!?!

Jeg har prøvet lidt:

    Private Sub ParseDescription()
        Description = ""
        mObjRegExp.Pattern = "<META[^>]+(name=""description""|content=""([^""]*)"")[^>]+(name=""description""|content=""([^""]*)"")[^>]*>"
        Set mObjMatches = mObjRegExp.Execute(mStrHTML)
        If mObjMatches.Count = 0 Then Exit Sub
        Description = mObjMatches.item(0).Value
        Description = Mid(Description, InStr(1, Description, "content=""", vbTextCompare) + 9)
        Description = Mid(Description, 1, InStr(1, Description, """", vbTextCompare) -1)
       
        Description = Replace(Description,"æ","&aelig;")
        Description = Replace(Description,"Æ","&AElig;")
        Description = Replace(Description,"ø","&oslash;")
        Description = Replace(Description,"Ø","&Oslash;")
        Description = Replace(Description,"å","&aring;")
        Description = Replace(Description,"Å","&Aring;")
    End Sub
Avatar billede neteffect Nybegynder
24. november 2002 - 14:27 #5
Je tror det bedst kan gøres på denne måde

Nedenfor her er en modificeret version af sidste del af GetURL, hvor indholdet hentes.

Gem .ResponseText i en midlertidig variabel, mens du replacer. Jeg har brugt strText, som allerede var dim'et, men tilsyneladende ikke blev brugt. Aflevér som oprindeligt i funktionsresultatet GetURL

        With lObjSpider
            .Open "GET", pStrURL, False, "", ""
            .Send
            strText = .ResponseText
            strText = Replace(strText,"æ","&aelig;")
            strText = Replace(strText,"Æ","&AElig;")
            strText = Replace(strText,"ø","&oslash;")
            strText = Replace(strText,"Ø","&Oslash;")
            strText = Replace(strText,"å","&aring;")
            strText = Replace(strText,"Å","&Aring;")
            GetURL = .strText
        End With
        Set LobjSpider = Nothing

        HTML = GetURL
Avatar billede loukas Mester
24. november 2002 - 21:23 #6
Får følgende fejl:
Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'strText'

/parse/parse/clsHTMLParser.asp, line 107

Måske skal jeg prøve at omdøbe strText ??!?!?
Avatar billede neteffect Nybegynder
24. november 2002 - 21:27 #7
Nej, det var mig der lavede en lille fejl:

          GetURL = strText

- Christian
Avatar billede loukas Mester
24. november 2002 - 22:08 #8
Mystisk... den laver det samme igen :-(
prøv selv : http://www.istoria.dk/parse/parse/demo.asp
Avatar billede loukas Mester
24. november 2002 - 22:10 #9
altså den laver ? i stedet for æ, ø eller å
Avatar billede neteffect Nybegynder
24. november 2002 - 22:17 #10
jeg får
/parse/parse/clsHTMLParser.asp, line 98

Hvad er linie 98?

  Set LobjSpider = Nothing

skal være
  Set IobjSpider = Nothing
Avatar billede loukas Mester
24. november 2002 - 22:30 #11
det er fordi det skal stå http://
så virker det :-)
Avatar billede loukas Mester
24. november 2002 - 22:31 #12
With lObjSpider
            .Open "GET", pStrURL, False, "", ""  <--- LINIE 98 ---
            .Send
            strText = .ResponseText
            strText = Replace(strText,"æ","&aelig;")
            strText = Replace(strText,"Æ","&AElig;")
            strText = Replace(strText,"ø","&oslash;")
            strText = Replace(strText,"Ø","&Oslash;")
            strText = Replace(strText,"å","&aring;")
            strText = Replace(strText,"Å","&Aring;")
            GetURL = strText
        End With
        Set LobjSpider = Nothing

        HTML = GetURL
Avatar billede neteffect Nybegynder
24. november 2002 - 22:34 #13
Ja, men der er stadig ? i outputtet.
Avatar billede loukas Mester
24. november 2002 - 22:49 #14
ja, desværre
Avatar billede neteffect Nybegynder
25. november 2002 - 08:31 #15
Prøv at finde ud af, hvad ascii-koderne for '?' er.
Prøv med andre konverteringsstrategier, fx æ -> ae osv, bl.a. for at se, om der er hul igennem.
Avatar billede loukas Mester
26. november 2002 - 00:18 #16
OK !!
Nu må jeg hellere fortælle at jeg er helt grøn med RegExp..
Og hvordan finder jeg ud af ascii-koderne ???
Avatar billede neteffect Nybegynder
26. november 2002 - 08:36 #17
Ingen grund til at rode med regexp. Strategien må være at finde ud af, hvad der bliver af æøå-erstatningerne.

ascii-koderne kan du få vist med Asc. Løb teskstrengen igennem med Mid i et loop.
Avatar billede loukas Mester
26. november 2002 - 12:10 #18
Altså, sådan her ??
With lObjSpider
            .Open "GET", pStrURL, False, "", ""
            .Send
            strText = .ResponseText
            strText = Replace(strText,"æ","&aelig;")
            strText = Replace(strText,"Æ","&AElig;")
            strText = Replace(strText,"ø","&oslash;")
            strText = Replace(strText,"Ø","&Oslash;")
            strText = Replace(strText,"å","&aring;")
            strText = Replace(strText,"Å","&Aring;")
            strText = ASC(strText)          <------HER--- ??!?----
            GetURL = strText
        End With
        Set lobjSpider = Nothing

Hvorfor i et loop, og hvorfor med Mid ???
Jeg er ikke helt med.
Som den står ovenfor får jeg et tomt resultat :-(
Avatar billede neteffect Nybegynder
26. november 2002 - 12:23 #19
Meningen er jo at finde ud af, hvorfor der optræder spørgsmålstegn i resultatet. Jeg tror spørgsmåltegnene er tegn, der ikke kan vises.

Her er en funktion, som returnerer en tekststreng "oversat" til tegnkoder.

function ascStr( s )
dim i, tmpStr
tempStr=""
for i=1 to len(s)
  tmpStr= tmpStr & asc(mid(s, i, 1)) & " "
next
ascStr= tmpStr
end function

Du kan fx bruge funktionen i
              <TD><%=.Title%></TD>

til at se hvad ascii-koderne i title-strengen er:

<TD><%=.Title%><br>ASCII: ascStr(.Title)%></TD>
Avatar billede loukas Mester
27. november 2002 - 00:09 #20
OK, nu viser den ASCII-koderne for .Title
men , hvad skal jeg gøre med dem ??
Avatar billede loukas Mester
27. november 2002 - 00:21 #21
Jeg har prøvet at slå ascii-koden op der hvor der står et'?'
koden er: 63 og det er et '?'
hmmm.
Avatar billede neteffect Nybegynder
27. november 2002 - 08:58 #22
Prøv at udskifte
strText = Replace(strText,"æ","&aelig;")
- bare for dét bogstav du nu tester - til
strText = Replace(strText,"æ","ae")

..for at kontrollere, hvor årsagen til problemet ligger
Avatar billede loukas Mester
28. november 2002 - 00:05 #23
Jeg har prøvet at gøre som du skriver.
Ved æ, ø og å sker der intet(der kommer et '?')
Prøver jeg: Replace(str,"?", "QQQ")
Så sker der intet med de '?' hvor der skulle være et æ, ø eller å
Der hvor der skal være et "rigtigt ?" Replacer den som den skal.
Og så er det måske også relevant at fortælle, at de 4 tegn der kommer lige efter et æ,ø eller å forsvinder
Altså bliver f.eks.
ællinger til ?nger
Avatar billede neteffect Nybegynder
28. november 2002 - 08:34 #24
Mystisk. Jeg skal lige være sikker - hvis du gør sådan:

        With lObjSpider
            .Open "GET", pStrURL, False, "", ""
            .Send
            strText = .ResponseText
            strText = Replace(strText,"æ","ae")
            strText = Replace(strText,"Æ","AE")
            strText = Replace(strText,"ø","oe")
            strText = Replace(strText,"Ø","OE")
            strText = Replace(strText,"å","aa")
            strText = Replace(strText,"Å","AA")
            GetURL = .strText
        End With
        Set LobjSpider = Nothing

        HTML = GetURL

... er der så stadig "?"
Avatar billede loukas Mester
28. november 2002 - 11:21 #25
Ja, desværre !!
Du får lige hele koden igen som den ser ud nu.



Class clsHTMLParser
' ------------------------------------------------------------------------------
    Private mStrHTML
    Private mObjRegExp
    Private mObjMatches
    Private mObjMatch
    Public Title
    Public Keywords
    Public Description
' ------------------------------------------------------------------------------
    Public Property Let HTML(ByRef pStrHTML)
        mStrHTML = pStrHTML

        Set mObjRegExp = New RegExp
        mObjRegExp.IgnoreCase = True

        Call ParseTitle()
        Call ParseDescription()
        Call ParseKeywords()

        Set mObjMatch = Nothing
        Set mObjMatches = Nothing
        Set mObjRegExp = Nothing

    End Property
' ------------------------------------------------------------------------------
    Public Property Get HTML()
        HTML = mStrHTML
    End Property
' ------------------------------------------------------------------------------
    Private Sub ParseTitle()
        Title = ""
        mObjRegExp.Pattern = "<TITLE>([^<]*)</TITLE>"
        Set mObjMatches = mObjRegExp.Execute(mStrHTML)
        If mObjMatches.Count = 0 Then Exit Sub
        Title = mObjMatches.item(0).Value
        Title = Replace (Title,"?","ae")
        Title = Replace(Title, "<TITLE>", "", 1, -1, vbTextCompare)
        Title = Replace(Title, "</TITLE>", "", 1, -1, vbTextCompare)
    End Sub
' ------------------------------------------------------------------------------
    Private Sub ParseDescription()
        Description = ""
        mObjRegExp.Pattern = "<META[^>]+(name=""description""|content=""([^""]*)"")[^>]+(name=""description""|content=""([^""]*)"")[^>]*>"
        Set mObjMatches = mObjRegExp.Execute(mStrHTML)
        If mObjMatches.Count = 0 Then Exit Sub
        Description = mObjMatches.item(0).Value
        Description = Mid(Description, InStr(1, Description, "content=""", vbTextCompare) + 9)
        Description = Mid(Description, 1, InStr(1, Description, """", vbTextCompare) -1)
    End Sub
' ------------------------------------------------------------------------------
    Private Sub ParseKeywords()
        Keywords = ""
        mObjRegExp.Pattern = "<META[^>]+(name=""keywords""|content=""([^""]*)"")[^>]+(name=""keywords""|content=""([^""]*)"")[^>]*>"
        Set mObjMatches = mObjRegExp.Execute(mStrHTML)
        If mObjMatches.Count = 0 Then Exit Sub
        Keywords = mObjMatches.item(0).Value
        Keywords = Mid(Keywords, InStr(1, Keywords, "content=""", vbTextCompare) + 9)
        Keywords = Mid(Keywords, 1, InStr(1, Keywords, """", vbTextCompare) -1)
    End Sub
' ------------------------------------------------------------------------------
    Public Function GetURL(ByRef pStrURL)

        Dim lObjSpider
        Dim strText

        If pStrURL = "" Then Exit Function

        On Error Resume Next

        ' Different variations of XML objects
        'Set lObjSpider = Server.CreateObject ("MSXML2.XMLHTTP.3.0")
        'Set lObjSpider = Server.CreateObject ("MSXML2.ServerXMLHTTP")
        Set lObjSpider = Server.CreateObject ("Microsoft.XMLHTTP")
       

        ' Could not create Internet Control
        If Err Then
            GetURL = "Error: " & Err.Description
            Exit Function
        End If
       
        On Error Goto 0

        With lObjSpider
            .Open "GET", pStrURL, False, "", ""
            .Send
            strText = .ResponseText
            strText = Replace(strText,"æ","ae")
            strText = Replace(strText,"Æ","AE")
            strText = Replace(strText,"ø","oe")
            strText = Replace(strText,"Ø","OE")
            strText = Replace(strText,"å","aa")
            strText = Replace(strText,"Å","AA")
            GetURL = strText
        End With
        Set LobjSpider = Nothing

        HTML = GetURL
       
    End Function
' ------------------------------------------------------------------------------
End Class

function ascStr( s )
    dim i, tmpStr
    tempStr=""
    for i=1 to len(s)
    tmpStr= tmpStr & asc(mid(s, i, 1)) & " "
    next
    ascStr= tmpStr
end function
' ------------------------------------------------------------------------------
%>
Avatar billede loukas Mester
28. november 2002 - 11:26 #26
function ascStr( s )
kører på .title
http://www.istoria.dk/parse/parse/demo.asp
Avatar billede neteffect Nybegynder
28. november 2002 - 13:23 #27
Jeg tror det er komponenten XMLHTTP, der ikke kan håndtere æøå.

Ifølge http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcexmlht/htm/cerefixmlhttprequestmembers.asp kan du i stedet for .responseText bruge responseBody til at få resultatet som en byte-array.
Avatar billede loukas Mester
29. november 2002 - 02:51 #28
Jeg har prøvet at erstatte .responseText med .responseBody
og det ser højst besynderligt ud det der kommer ?!?!
Avatar billede loukas Mester
30. november 2002 - 23:55 #29
Hej igen, og 1000 tak for hjælpen..
Jeg har nu med din hjælp og en masse artikler rundt omkring på nettet fået der her til at virke.
Det var en tung omgang for en fritids-progg.. som mig ;-)

Function HTTPGet(strURL) 'As String
        Dim strReturn ' As String
        Dim objHTTP '  As MSXML.XMLHTTPRequest
        If Len(strURL) Then
            Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
            objHTTP.open "GET", strURL, False
            objHTTP.send  'Get it.
            strReturn = objHTTP.responseBody
        End If
        HTTPGet = strReturn 
End Function
    r = HTTPGet("http://istoria.dk/")
    response.write(r)
   
            sOut = ""
            For i = 0 to UBound(r)
                sOut = sOut & chrw(ascw(chr(ascb(midb(r,i+1,1)))))
            Next
            strReturn = sOut
    response.write server.HTMLencode(sOut)

PS.
Var inde at kigge på din side, det ser ellers proft ud..
Avatar billede neteffect Nybegynder
01. december 2002 - 11:58 #30
Tak for points og ros til siden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester