Schrift
[thread]6911[/thread]

utf 8: lesen und schreiben von utf8-html-seiten (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
newbie001
 2005-04-20 13:13
#53973 #53973
User since
2005-04-19
8 Artikel
BenutzerIn
[default_avatar]
ja und durch open($R,"<:utf8",$fn) sage ich auch dass die datei in utf-8 kodiert ist.
Crian
 2005-04-20 13:19
#53974 #53974
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Und weiß das auch das Tool, mit dem Du die Datei dann betrachtest? (Den Lister, der beim Total Commander dabei ist, kann man z.B. auf utf8 umschalten, das muss man dann beim Betrachten aber auch tun.)\n\n

<!--EDIT|Crian|1113988858-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
newbie001
 2005-04-20 14:10
#53975 #53975
User since
2005-04-19
8 Artikel
BenutzerIn
[default_avatar]
ein normales Lesen und Schreiben (ohne Benutzung des Modus :utf8) funktioniert. problematisch ist es dass es immer noch html ist, also tags und skripts sind immer noch vorhanden, dazu kommt dass einige Zeichen wie das Apostroph immer noch als &’ kodiert ist. Ich glaube hier versteckt sich das Problem.
GwenDragon
 2005-04-20 14:27
#53976 #53976
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
[quote=newbie001,20.04.2005, 12:10]problematisch ist es dass es immer noch html ist, also tags und skripts sind immer noch vorhanden, dazu kommt dass einige Zeichen wie das Apostroph immer noch als &’ kodiert ist.[/quote]
Nun ja, du muss noch die HTML-tags löschen. ;)
Das geht mit CPAN:HTML::Parser.
Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl -w

# Extract all plain text from an HTML file

use strict;
use HTML::Parser 3.00 ();

my %inside;

sub tag
{
  my($tag, $num) = @_;
  $inside{$tag} += $num;
  print " ";  # not for all tags
}

sub text
{
   return if $inside{script} || $inside{style};
   print $_[0];
}

HTML::Parser->new(api_version => 3,
          handlers    => [start => [\&tag, "tagname, '+1'"],
               
   end   => [\&tag, "tagname, '-1'"],
               
   text  => [\&text, "dtext"],
               
  ],
          marked_sections => 1,
    )->parse_file(shift) || die "Can't open file: $!\n";;



PS: Es wäre ja nützlich, wenn längere Skripte hier hoch geladen werden könnten.\n\n

<!--EDIT|GwenDragon|1113993261-->
renee
 2005-04-20 14:53
#53977 #53977
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn es wirklich nur darum geht, die Tags zu löschen, geht es noch einfacher:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl -w

# Extract all plain text from an HTML file

use strict;
use HTML::Parser 3.00 ();

my $html = qq~<html><body>dies ist <b> ein test</b>.<br /><center>Test</center></body></html>~;

sub text
{
print shift;
}

HTML::Parser->new(api_version => 3, handlers => [ text => [\&text, "dtext"], ])->parse($html);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
newbie001
 2005-04-20 15:09
#53978 #53978
User since
2005-04-19
8 Artikel
BenutzerIn
[default_avatar]
na ja die Tags zu löchen ist kein Problem, am einfachsten ist:
$html =~ s/<.*>//g;

das Problem ist die so was wie &’ in utf8-Bytes zu konvertieren.
renee
 2005-04-20 15:17
#53979 #53979
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ohje, so solltest Du besser keine Tags löschen, weil Du sonst zuviel löscht... Bei sowas ist es besser auf bewährte Parser umzusteigen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
GwenDragon
 2005-04-20 15:19
#53980 #53980
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
[quote=renee,20.04.2005, 12:53]Wenn es wirklich nur darum geht, die Tags zu löschen, geht es noch einfacher:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl -w

# Extract all plain text from an HTML file

use strict;
use HTML::Parser 3.00 ();

my $html = qq~<html><body>dies ist <b> ein test</b>.<br /><center>Test</center></body></html>~;

sub text
{
  print shift;
}

HTML::Parser->new(api_version => 3, handlers    => [ text  => [\&text, "dtext"], ])->parse($html);
[/quote]
Dein Beispiel habe ich gerade getestet! ;)
Definitiv nein, so geht es nur teilweise.
Wenn du CSS-Styles und Skripte im HTML eingebunden hast, bleiben die Inhalte der Skripte und der Styles im Text.
newbie001
 2005-04-20 16:31
#53981 #53981
User since
2005-04-19
8 Artikel
BenutzerIn
[default_avatar]
hey, ich habe es geschaft.
man sollte die Tags mit den regulären ausdrücken beseitigen. Anschließend benutzt man das Modul HTML::Entities um sachen wie &’ in unicode zu transformieren:D
pq
 2005-04-20 17:02
#53982 #53982
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=newbie001,20.04.2005, 14:31]hey, ich habe es geschaft.
man sollte die Tags mit den regulären ausdrücken beseitigen. Anschließend benutzt man das Modul HTML::Entities um sachen wie &’ in unicode zu transformieren:D[/quote]
also, dein regulärer ausdruck s/<.*>//g macht aus meinem html
<html><head><title>Titel</title></head><body>blubber</body></html>
einen leeren string:
Code: (dl )
1
2
3
4
5
$ perl -wle'
$html = "<html><head><title>Titel</title></head><body>blubber</body></html>";
$html =~ s/<.*>//g;
print "($html)"'
()
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2005-04-19 21:03.