Option Explicit Dim strHtml As String '受信したHTMLの生データ Private Sub Form_Load() 'フォームロード Command1.Caption = "Go" CheckBox1.Caption = "タグ除去" Me.Caption = "HTMLデータ受信 タグ除去機能付き" Text1.Text = "http://www.yahoo.co.jp/" 'YAHOO End Sub Private Sub Form_Unload(Cancel As Integer) 'フォームアンロード End End Sub Private Sub Form_Resize() ' フォームリサイズ ' On Error Resume Next Text1.Width = Me.ScaleWidth - Text1.Left Text2.Width = Me.ScaleWidth - Text2.Left Text2.Height = Me.ScaleHeight - Text2.Top On Error GoTo 0 End Sub Private Sub Command1_Click() '「Go」開始 Dim lngSize As Long '受信サイズ Dim bytArray() As Byte 'データを受け取るバッファ(Byte型配列) Dim bytResult() As Byte '変換後のデータ格納域 Dim tmp As String Command1.Enabled = False '「Go」ボタンを無効 strHtml = "" Text2 = "" 'テキストボックスをクリア 'tText1 で指定したURLのデータを取得 lngSize = GetHtml(Text1.Text, bytArray(), "") If lngSize > 0 Then '成功 tmp = StrConv(bytArray, vbUnicode) 'Unicode変換 '---------------------------------------------------------------------- ' 文字コード変換処理 ' EUC,UTF-8などからShift-Jisへの変換を行うには、 ' Nkf32.dllをダウンロード ( Nkf32.dllの入手先 ) ' http://www.vector.co.jp/soft/win95/util/se295331.html '----------------------------------------- ReDim bytResult(LenB(StrConv(tmp, vbFromUnicode)) * 4) '変換後の最大必要域確保 Call SetNkfOption("s") 'Nkf:Shift-Jis指定 Call NkfConvert(bytResult(0), bytArray(0)) 'Nkf:変換 Call ResizeBytes(bytResult()) 'Null位置まで配列をリサイズ tmp = StrConv(bytResult, vbUnicode) 'Unicodeに変換 '改行変換 tmp = Replace(tmp, vbCrLf, Chr(&H1)) 'CrLf退避 &H1は通常文字コードとしては使われていない tmp = Replace(tmp, vbLf, vbCrLf) 'Lf→CrLf tmp = Replace(tmp, vbCr, vbCrLf) 'Cr→CrLf ついでに tmp = Replace(tmp, Chr(&H1), vbCrLf) '退避しておいたCrLfを復帰 strHtml = tmp Call CheckBox1_Click ' タグ除去処理後、テキストボックスに表示 End If Command1.Enabled = True '「Go」ボタンを有効 End Sub Private Sub CheckBox1_Click() 'タグ除去ボタン If CheckBox1.Value = 0 Then Text2.Text = strHtml 'HTML生データ Else Text2.Text = CutTag(strHtml) 'タグ除去データ End If Text2.ToolTipText = Len(Text2) & "文字" '文字数をヒントテキストに表示 End Sub '------------------------- ' 内部関数 '------------------------- Private Function CutTag(strSrc As String) As String ' ' HTMLのタグを除去し、コード化された文字を復活する ' Dim re As RegExp '正規表現用のオブジェクト ' 参照設定:Microsoft VBScript Regular Expressions Dim colMatches As MatchCollection ' マッチコレクション Dim tmp As String '作業用 '-- 改行削除 --------------- tmp = Replace(strSrc, vbCrLf, "") 'CRLF tmp = Replace(tmp, vbLf, "") 'LF tmp = Replace(tmp, vbCr, "") 'CR '-- タグ除去 --------------- Set re = New RegExp '正規表現オブジェクト作成 re.Global = True '文字列全体でパターンマッチング re.IgnoreCase = True '大文字と小文字を区別しない re.Pattern = "< *script.*?</script *?>" 'Script削除 tmp = re.Replace(tmp, "") re.Pattern = "<!--.*?-->" 'コメント削除 tmp = re.Replace(tmp, "") re.Pattern = "< *style.+?</style *>" 'スタイルタグ削除 tmp = re.Replace(tmp, "") re.Pattern = "< *br *>" '改行タグを改行に置換 tmp = re.Replace(tmp, vbCrLf) re.Pattern = "<.+?>" 'その他のタグを削除 tmp = re.Replace(tmp, "") '-- エスケープ文字 ---------- tmp = Replace(tmp, """, """") ' " tmp = Replace(tmp, "&", "&") ' & tmp = Replace(tmp, ">", ">") ' > tmp = Replace(tmp, "<", "<") ' < tmp = Replace(tmp, " ", " ") ' 半角空白 CutTag = tmp Set re = Nothing '開放 End Function Public Function ResizeBytes(ByRef bytArray() As Byte) As Long ' ' Null位置まで配列をリサイズ ' Dim p As Long 'Null位置 p = InStr(bytArray, Chr(0), vbBinaryCompare) 'Null文字を検索(バイナリモード) If p > 0 Then ReDim Preserve bytArray(p - 1) '配列再定義 '配列要素最大値を返却 ResizeBytes = UBound(bytArray) + 1 End Function Private Sub Text1_GotFocus() 'Urlを全選択 Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub