Avatar billede tamen Nybegynder
09. januar 2003 - 00:06 Der er 17 kommentarer og
1 løsning

html_entities uden om tags

Kan man få html_entities til at gå uden om eventuelle tags og allerede kodede tegn i en streng?
For eksempel hvis jeg har en streng som denne (Nu  håber jeg den går i gennem ;) ): "&aelig;&oslash;&aring; &lt;tag&gt; <a href="(EmptyReference!)">link æøå</a>"
Så skal den ikke lave og-tegnene om til ampersand-et-eller-andet, men lave de sidste æøå om til "&aelig;&oslash;&aring;" uden at røre det andet. Der må være en nem måde at gøre det på, uden at skulle side og lave en masse str_replace's.
Avatar billede erikjacobsen Ekspert
09. januar 2003 - 00:12 #1
Du kan nøjes med én str_replace der kan erstatte æ og ø og å på
samme tid, men det er den eneste vej: lav din egen liste.

Men jeg vil da gerne spørge hvordan den streng er kommet til verden.
Måske er der en anden løsning?
Avatar billede erikjacobsen Ekspert
09. januar 2003 - 00:14 #2
$a[]='æ'; $b[]='&aelig;';
$a[]='ø'; $b[]='&oslash;';
// osv
$tekst=str_replace($a,$b,$tekst);
Avatar billede tamen Nybegynder
09. januar 2003 - 00:28 #3
Strengen var bare et eksempel. Er ved at lave en script til min hjemmeside. Jeg vil gerne kunne skrive HTML i mine nyheder, men også gerne ha scriptet til at chekke for eventuelle udeomsløbende æ'er ø'er å'er eller andre tegn der har bedre af at blive konverteret.
Avatar billede erikjacobsen Ekspert
09. januar 2003 - 00:30 #4
Det lyder skummelt :)  Men ok - du kan jo prøve den str_replace jeg froeslår
Avatar billede tamen Nybegynder
09. januar 2003 - 00:30 #5
Men på den anden side ville et tekstfelt jo konvertere &aelig; til æ, og lignende. Så det er vel bare omman kan html_entities uden om tags.
Avatar billede tamen Nybegynder
09. januar 2003 - 00:36 #6
Jeg er bare ikke glad for at låse mig fast og kun konvertere de tegn jeg lige har husket at skrive in i scriptet.
Avatar billede olebole Juniormester
09. januar 2003 - 00:37 #7
<ole>

Der er en anden lille 'sexy' funktion i PHP: strtr():

$a = array(
  "æ" => "&aelig;",
  "ø" => "&oslash;",
  "å" => "&aring;"
);

$tekst = strtr( $tekst, $a );

/mvh
</bole>
Avatar billede erikjacobsen Ekspert
09. januar 2003 - 00:40 #8
Katastrofen er vel ikke så stor hvis du glemmer nogle tegn.
Der kan være nogen tegn på en side, der ikke kan ses i enkelte
browsere, og du kan altid tilføje nye tegn senere.
Avatar billede Slettet bruger
09. januar 2003 - 01:27 #9
Nedenstående skulle gerne klare dit problem!
(Hvad angår listen af entities er der rigtigt mange muligheder... så lav listen efter behov!)

$notentities[] = "æ"; $entities[] = "&aelig;";
$notentities[] = "ø"; $entities[] = "&oslash";
$notentities[] = "å"; $entities[] = "&aring";
$notentities[] = "&"; $entities[] = "&amp;";

preg_match_all("/[^<>]+|<.*?>/", $string, $matches);
$ii=0;
foreach($matches[0] as $part)
{
    if (substr($part, 0, 1) != "<")
    {
        $newstr .= preg_replace($notentities, $entities, $part);
    }
    else
    {
        $newstr .= $part;
    }
    $ii++;
}
Avatar billede tamen Nybegynder
09. januar 2003 - 14:42 #10
Nu er jeg ikke så stiv i regexp men er det din preg_match_all gør ikke at gøre nogen ting ved alt det i en streng som ikke er i tags? I såfald kan man jo bare lave html_entities på de dele?
Avatar billede Slettet bruger
09. januar 2003 - 14:48 #11
Preg_match_all cutter bare strengen op i en masse dele... $parts

if (substr($part, 0, 1) != "<") - tester om delen er indholdet i et tag <indhold i et tag> eller tekst - "<tag>tekst</tag>"!

preg_replace($notentities, $entities, $part); sætter så entitiesne, hvis det er tekst!
Avatar billede tamen Nybegynder
09. januar 2003 - 19:08 #12
Så hvis jeg har forstået det rigtigt bliver de dele af strengen som ikke er tags behandlet af den første del af if'en og dem der er tags af den anden?

Jeg har prøvet det her:

--php fil--
<?php

$string='Iam just a lame <> string häving ßome lame german <b>chärs</b> MÖH <a href=" http://www.google.de" >göögle</a> döh!';

preg_match_all("/[^<>]+|<.*?>/", $string, $matches);

$ii=0;
foreach($matches[0] as $part)
{
    if (substr($part, 0, 1) != "<")
    {
/*        $newstr .= preg_replace($notentities, $entities, $part);  */
        $newstr .= htmlentities($part, ENT_QUOTES );
    }
    else
    {
        $newstr .= $part;
    }
    $ii++;
}

echo $newstr;
?>
--/php fil--
Men det gir mig en fejl: Parse error:  parse error, unexpected T_IF in /Library/WebServer/Documents/wide.dev/preg2.php on line 10
Avatar billede Slettet bruger
09. januar 2003 - 20:00 #13
hmmmm... Virker udmærket når jeg jeg kører scriptet på min egen comp!
Avatar billede tamen Nybegynder
09. januar 2003 - 21:06 #14
Jeg kan ikke rigtigt forstå hvofor det ikke vil køre, men anyway, jeg lavede lidt om på det og nu virker det som det skal :)

--phpfil--
<?php
$string="Iam just a lame <> string häving ßome lame german <b>chärs</b> MÖH <a href=\"http://www.google.de\" >göögle</a> döh!";

preg_match_all('/[^<>]+|<.*?>/', $string, $matches);

$ii=0;
foreach($matches[0] as $part) {

    if ($part[0] != "<") {
   
        $newstr .= htmlentities($part, ENT_QUOTES);
   
    } else {
   
        $newstr .= $part;
   
    }

}

echo $newstr;
?>
--/phpfil--
Avatar billede tamen Nybegynder
09. januar 2003 - 21:10 #15
Næsten da, den er ikke rigtigt glad for at lave tegnene om til de rigtige entities. men jeg er for træt til at gøre mere ved det nu.
Avatar billede tamen Nybegynder
09. januar 2003 - 22:28 #16
Ku ikke sove :/ Men jeg fandt dog ud af at det virker fint når strengen kommer fra en POST form.
Hvis du vil ha pointsne, Regin, så lav et svar :)
Avatar billede Slettet bruger
09. januar 2003 - 23:43 #17
sure... :P
Avatar billede tamen Nybegynder
10. januar 2003 - 14:31 #18
There ya go :) tak for hjælpen allesammen :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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