Avatar billede human Nybegynder
03. september 2004 - 17:13 Der er 24 kommentarer og
1 løsning

Kun tillade nogle tegn

heysa!

Brugere af min side har muligheden for at skrive en lille fritekst..

Men i den tekst skal der kun være mulighed for:
<a href=""></a>
<font color="#"></font>
<b></b>
<i></i>
<u></u>
<ul></ul>
<li></li>
<blockquote></blockquote>

Variablen hedder $info.
Hvis brugeren indtaster andre tegn end disse (bortset fra alm bogstaver og tal), skal de ignoreres og bare udskrives på siden, så de ikke har nogen funktion..

Er det muligt? :)
Avatar billede dennismp Nybegynder
03. september 2004 - 18:01 #1
$info = strip_tags($info,'<p><font><b><i><u><ul><li><blockquote>');

... tror jeg
Avatar billede human Nybegynder
03. september 2004 - 18:11 #2
okay..

Men ER de tegn tilladte på den måde?
Men hvis det bare er font, så kan man vel også bare skrive <font size=""></font>
Det skal ikke være muligt, kun color :)
Avatar billede dennismp Nybegynder
03. september 2004 - 18:17 #3
Ja, det burde de være (har ikke selv brugt den).

Du kan jo bruge et regulært udtryk efterfølgende for at tjekke om der er color-tag med - men det kan da være at det ikke er godt nok med strip_tags. (man kan vel sagents bruge css - style="etellerandet" - hvis man vil).

Men så skal de alle tjekkes jo. men det burde være til at overkomme :).

Mange bruger løsningen at lave "egne" tags. fx. BBCode.. Hvor man bruger istedet for <b> og </b>. Så har du nemmere kontrol over det. Men hvis du vil have html'en, så vil jeg da godt se på noget regulær udtryk - efter aftensmaden :)
Avatar billede human Nybegynder
03. september 2004 - 18:29 #4
Yea.. Vil gerne have hvis du gider kigge på det :).. Regulære udtryk altså.
Avatar billede dennismp Nybegynder
03. september 2004 - 20:01 #5
Måtte lige følge med i, hvad der foregår i Rusland. Anyway. Her er et bud.

http://dennis.moellegaard.dk/v4/php/strip_tags.php?source=2

Det virker garanteret ikke perfekt :)
Avatar billede human Nybegynder
03. september 2004 - 20:09 #6
Det var da noget af en omgang.. Det skal så bare indsættes før jeg smider $info i db right?

Og hvilken $ er det jeg erstatter med $info?

Eller misforstår jeg hvordan det sættes op? :)
Avatar billede dennismp Nybegynder
03. september 2004 - 20:20 #7
Har lige rodet lidt med det ..

Du tager de to funktioner, mystrip_tags og attrcheck med over i din kode.. Og så bruger du blot:

$info = mystrip_tags($info);
Avatar billede human Nybegynder
03. september 2004 - 20:25 #8
Dvs. det her kode?:

$example = strip_tags($example,'<a><p><font><b><i><u><ul><li><blockquote>');
$example = preg_replace_callback("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/i", 'attrcheck',$example);

function attrcheck($code) {
    //print htmlentities(join(',',$code));
    switch( $code[2] ) {   
        case 'a':
            if( preg_match('/<a.*href\s*=\s*["\'](.*)["\'].*>([^<]+)/i',$code[0],$match) )
                return ('<a href="'.$match[1].'">'.$match[2].'</a>');
            else
                return ''; // No href? Remove link.
        break;

        case 'font':
            if( preg_match('/<font.*color\s*=\s*["\'](.*)["\'].*>([^<]+)/i',$code[0],$match) )
                return ('<font color="'.$match[1].'">'.$match[2].'</font>');
            else
                return ''; // No color? Remove link.
        break;

        /* case 'b': case 'i': case 'u': case 'ul': case 'li': case 'blockquote': */
        default:
            if( preg_match("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $code[0], $match) ) {
                return '<' . $match[2] . '>' . $match[3] . '</' . $match[2] . '>';
            }
            else {
                return '';
            }
    }
}

Også $info = mystrip_tags($info);

Smid i db..

Og så skal der ik gøres andet end bare smide det ud almindeligt når jeg trækker det ud right?
Avatar billede dennismp Nybegynder
03. september 2004 - 20:26 #9
Fjern de to øverste linjer (med $example).
Tilføj:

function mystrip_tags($text) {
    $text = strip_tags($text,'<a><p><font><b><i><u><ul><li><blockquote>');
    return preg_replace_callback("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/i", 'attrcheck',$text);
}

så burde den være i vinkel.. Nej, du skal ikke gøre andet, end at kalde mystrip_tags
Avatar billede human Nybegynder
03. september 2004 - 20:39 #10
Jeg skrev:

<a href="http://google.com"></a>
<font color="D8FF00">hej</font>
<b>bold</b>
<i>kursiv</i>
<u>under</u>
<ul>fraf</ul>
<li>faref</li>
<blockquote>freaf</blockquote>

Resultat:

bold(som var grøn, var ikke meningen)
kursiv
under

      fraf


faref

    freaf


Link blev ikke udskrevet.
Den forkerte tekst blev farvet.
Indrygning skete forkert, som skulle have været af det mindterste "kludre" ord..

Håber du forstår.
Avatar billede human Nybegynder
03. september 2004 - 20:41 #11
eller vent..
skal:

function mystrip_tags($text) {
    $text = strip_tags($text,'<a><p><font><b><i><u><ul><li><blockquote>');
    return preg_replace_callback("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/i", 'attrcheck',$text);
}
ind på siden hvor jeg udskriver $info, skal det vel?
Avatar billede dennismp Nybegynder
03. september 2004 - 20:53 #12
Den skal bare være defineret. Om du har den i samme fil, eller i en anden fil du henter ind med include/require er ligemeget:

Den bruges sådan her:
$info = '<b>test</b>';
$info = mystrip_tags($info);
print $info;

.. Jeg prøvede lige din html:

- linket bliver ikke skrevet ud, når der ikke er nogen titel. Prøv med:
<a href="www.google.com</a>" target="_blank">http://google.com">www.google.com</a>  så burde det virke
- jeg kan ikke få min bold til at være grøn :-\
- Din html ang ul/li er forkert. Den bør være:
<ul>
  <li>fraf</li>
  <li>faref</li>
</ul>

Hvis du ser på mit link igen: http://dennis.moellegaard.dk/v4/php/strip_tags.php - så kan du se det resultat jeg får.
Avatar billede human Nybegynder
03. september 2004 - 21:04 #13
skrev:
<ul>
  <li>fraf</li>
  <li>faref</li>
</ul>

<ol>
  <li>Her står punkt et</li>
  <li>Her står punkt to</li>
</ol>

<b>bold</b>
<i>kur</i>
<u>un</u>

<a href="http://google.com">google</a>

<font color="#FF0000">grøn</font>

Resultat:
Punkt opstilling er korrekt nu.
kursiv og underline er korrekt.
bold er korrekt.
linket bliver helt fjernet.
font farver teksten mellem <b>bold</b>, og ikke den den burde.
Ved tal opstilling skriver den ikke tallet foran.
Indrygning korrekt.
Avatar billede human Nybegynder
03. september 2004 - 21:06 #14
På profil.php:
$info = $info_row['info'];
$info = nl2br($info);
function mystrip_tags($text) {
    $text = strip_tags($text,'<a><p><font><b><i><u><ul><li><blockquote>');
    return preg_replace_callback("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/i", 'attrcheck',$text);
}
?>
<br /> <?=$info?><br />

på retprofil.php:
function attrcheck($code) {
    //print htmlentities(join(',',$code));
    switch( $code[2] ) {
        case 'a':
            if( preg_match('/<a.*href\s*=\s*["\'](.*)["\'].*>([^<]+)/i',$code[0],$match) )
                return ('<a href="'.$match[1].'">'.$match[2].'</a>');
            else
                return ''; // No href? Remove link.
        break;

        case 'font':
            if( preg_match('/<font.*color\s*=\s*["\'](.*)["\'].*>([^<]+)/i',$code[0],$match) )
                return ('<font color="'.$match[1].'">'.$match[2].'</font>');
            else
                return ''; // No color? Remove link.
        break;

        /* case 'b': case 'i': case 'u': case 'ul': case 'li': case 'blockquote': */
        default:
            if( preg_match("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $code[0], $match) ) {
                return '<' . $match[2] . '>' . $match[3] . '</' . $match[2] . '>';
            }
            else {
                return '';
            }
    }
}
Avatar billede dennismp Nybegynder
03. september 2004 - 21:10 #15
Well, ol bliver strippet, da den ikke var i dit spørgsmål :) .. Tilføj den til strip_tags linjen, bare i slutningen.

Ellers tag en ny kopi af koden. Linket virker nemlig fint her.

Du skal kopierer fra /** SELVE KODEN **/-kommentaren (linje 45) og ned. Det over linje 45, er bare et eksempel som du kan ignorerer.
Avatar billede human Nybegynder
03. september 2004 - 21:15 #16
Skal:
$info = nl2br($info);
function mystrip_tags($text) {
    $text = strip_tags($text,'<a><p><font><b><i><u><ul><li><blockquote>');
    return preg_replace_callback("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/i", 'attrcheck',$text);
}
Stå på den side hvor det bliver smidt i db, eller siden hvor det bliver trukket ud?
Det er nemlig ikke samme side..
Avatar billede human Nybegynder
03. september 2004 - 21:19 #17
Well.. tal opstilling er korrekt nu..

Men den fjerner stadig linket og <font> og teksten i mellem :(

Har lige genkopieret det..
Avatar billede dennismp Nybegynder
03. september 2004 - 22:18 #18
hmm.. Hvordan ser din tekst ud, hel nøjagtig? Kan du ikke lave en test-side, der viser teksten, så jeg kan klippe/klistre så jeg kan få samme resultat.
Avatar billede human Nybegynder
03. september 2004 - 23:23 #19
Jo det kan jeg da godt.. Men det eneste der er i vejen nu, er at linket bliver fjernet og <font>..

Du vil stadig gerne se en test side?
Avatar billede dennismp Nybegynder
04. september 2004 - 00:00 #20
Ja. Jeg kan desværre ikke genskabe problemet - og så er det lidt svært at løse det..
Avatar billede human Nybegynder
04. september 2004 - 00:02 #21
Har du en email adresse, så kan jeg sende dig link, ikke meningen den skal være offentlig.
Avatar billede dennismp Nybegynder
04. september 2004 - 00:08 #22
jo, dennis@moellegaard.dk .. Men så tror jeg ikke du kan give points - men det går nok :)
Avatar billede human Nybegynder
04. september 2004 - 00:55 #23
Problemet bestod i, at jeg ikke havde kaldt $code = attrcheck($code); funktionen, på begge sider.

BAre så i andre ved det :)
Avatar billede dennismp Nybegynder
04. september 2004 - 00:57 #24
Bare behold de points - jeg overlever nok uden :). Er ikke helt sikker på hvad co-admins vil syntes om dette.

Luk bare, og forsat god kodelyst :)
Avatar billede human Nybegynder
04. september 2004 - 00:59 #25
Lukket..

De burde ikke synes noget om det.. Har jo skrevet hvad problemet var..
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