PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : arbeiten mit text


flobee
21.04.2003, 17:35:50
hallo! ich erstelle gerade ein banner system das auch den umgang mit "text banner" (webetext mit links) anstelle von gif/jpgs erlauben soll.

folgende situation: der text der anstelle des banners angezeigt werden soll darf auch nur in diesem bereich dargestellt werden (468x60). d.h. er muss ggf. gekürzt werden und mit einem "read more" link versehen ....

problem: wie kann ich nun den text kürzen, wenn er z.b. grosser als 200 zeichen lang ist (bzw so das er in diesen bereich passt) und dieser HTML code enthält. - > sprich: ich bräuchte eine erkennung wieviele zeichen der dargestellte text ohne html sein würde (das würde ich noch hinbekommen) aber wie kürze ich den html code ohne dabei TAGS in dem zulässigen anzeige bereich zu zerstören?

als anders beispiel um es auf den punkt zu bringen: der zerstörte link der suchanfrage (wie kann man das ändern?)HIER (http://www.cgix.de/user/flobee/modules.php?name=Directory&d_op=search&query=href)

hat das jemand einen plan, erfahrung, idee, tip?

frohe ostern, gruß flobee

c4
21.04.2003, 17:39:09
Da wirst Du nur mit substr() (http://www.php.net/manual/en/function.substr.php) arbeiten können.

flobee
21.04.2003, 18:40:09
das ist schon klar! da brauch ich wohl ein wenig mehr als einen befehl!
aber wie löse ich das problem der html tags erkennung?
es gibt ja ein freies script von phpslash das html tags aus einem text rauszieht allerdings habe ich ein wenig übung das entgegendgesetzt umzusetzen.. deshalb die frage nach ansätzen , ggf script snip um mal zu sehen "wie"..

|Coding
21.04.2003, 19:08:48
wie auch dir sicher bekannt sein dürfte ist php eine serverseitige sprache, welche eine kommonikation mit dem client unmöglich macht. so, das einzige was dir dann noch übrig bleibt, ist wohl das betreffende file einzulesen und dann auszuwerten/zu bearbeiten.

verstanden?

c4
21.04.2003, 19:21:12
<?php
$str='Es geht los. <font family="tahoma" size="1">'.
'Das <i>ist</i> ein Test zum testen eines <font'.
' size="6">T E S T E S</font> Was noch? hm... '.
'<b>Ein **** mit Gazelle zagt im Regen nie</b>'.
' Das war ein Palindrom.</font><font family="'.
'courier new" size="4">So, ich hoffe das'.
'</font> reicht zum rumtesten.';
$open=0; $chars=0;
$i=0; while ($i<strlen($str))
{
$temp=substr($str, $i, 1);
if ($temp=="<") { $open=1; }
if ($temp==">") { $open=0; }
if ($open==0) { $chars++; }
$i++;
}
echo $str."<br>n";
echo $chars;
exit;
?>

Es ist noch nicht ganz richtig. Er gibt 186 statt 176 aus. Das hängt vermutlich mit den 10 " zusammen. Aber Du wolltest ja eh nur eine Idee... :)

flobee
21.04.2003, 19:22:19
@|Coding, hast du dich gerade im thread versehen? ich verstehe die antwort nämlich nicht? was für ein "file" welcher "client"?


c4- ja das ist doch schon mal was! mal sehen.. danke

|Coding
21.04.2003, 21:42:35
ich habe doch in deutsch geschrieben oder nicht? :-)

das war nur die antwort auf das posting von dir. wer lesen kann ist klar im vorteil.

flobee
21.04.2003, 21:54:32
kannst du das auch erklären oder nur persönlich werden und austeilen !? (ich bin solch antwort a) von dir nicht gewöhnt b) verstehe ich gerade nix mehr)

von file einlesen war nie die rede und das ich javascript verwenden will um das clientseitig zu lösen ist nicht die rede , oder?

|Coding
21.04.2003, 22:27:21
Original geschrieben von flobee
kannst du das auch erklären oder nur persönlich werden und austeilen !? (ich bin solch antwort a) von dir nicht gewöhnt b) verstehe ich gerade nix mehr)...

wo bin ich persönlich geworde?

Original geschrieben von flobee
...wie löse ich das problem der html tags erkennung?...

--> wie auch dir sicher bekannt sein dürfte ist php eine serverseitige sprache, welche eine kommonikation mit dem client unmöglich macht. so, das einzige was dir dann noch übrig bleibt, ist wohl das betreffende file einzulesen und dann auszuwerten/zu bearbeiten.


hast du es jetzt verstanden oder muss ich es noch vorlesen?


Original geschrieben von flobee
verstehe ich gerade nix mehr

ich auch nicht, wie kann man etwas vergessen was man eben erst gefragt hatte?



btw: bin ich jetzt auch wieder persönlich geworden?

flobee
21.04.2003, 22:33:35
ich glaube du hast meine frage nicht verstanden! die rede ist von html TAGS in einem string und nicht dem html (quell) code....

und: "wer lesen kann ist im vorteil" ist ein blöder spruch
dennoch danke für dein feedback! :-)

|Coding
21.04.2003, 22:39:35
dann zeig mir mal wo du denn string geschrieben hast...

flobee
21.04.2003, 22:42:37
c4 hats doch verstanden und kam mit nem richtigen befehl und nem beispiel um die ecke! der string ist das was ich als "text" bezeichnet habe...oder nicht?

|Coding
21.04.2003, 22:48:15
ob string oder file, der befehl bleibt der selbige und nun gut hier, sonst wird das noch zum OT thema... :-)

flobee
21.04.2003, 22:59:11
:-) was ist OT? aber der beispiel code von c4 macht mehr probleme als ich dachte!
mal ein beispiel des freien html - code stripers (killt html code bzw lässt zulaässigen bestehen)
hast du eine idee den umzuschreiben nach dem motto: finde 200 zeichen aber gehe sie mir mit html code raus sofern welcher da ist....

<?php
function html_checker ($str, $strip="") {
/* The core of this code has been lifted from phpslash */
/* which is licenced under the GPL. */

if ($strip == "nohtml")
$AllowableHTML=array("b"=>1,"a"=>2); // zulässige html tags
$str = stripslashes($str);
$str = eregi_replace("<[[:space:]]*([^>]*)[[:space:]]*>",
'<1>', $str);
// Delete all spaces from html tags .
$str = eregi_replace("<a[^>]*href[[:space:]]*=[[:space:]]*"?[[:space:]]*([^" >]*)[[:space:]]*"?[^>]*>",
'<a href="1">', $str); # "
// Delete all attribs from Anchor, except an href, double quoted.
$str = eregi_replace("<[[:space:]]* img[[:space:]]*([^>]*)[[:space:]]*>", '', $str);
// Delete all img tags
$tmp = "";
while (ereg("<(/?[[:alpha:]]*)[[:space:]]*([^>]*)>",$str,$reg)) {
$i = strpos($str,$reg[0]);
$l = strlen($reg[0]);
if ($reg[1][0] == "/") $tag = strtolower(substr($reg[1],1));
else $tag = strtolower($reg[1]);
if ($a = $AllowableHTML[$tag])
if ($reg[1][0] == "/") $tag = "</$tag>";
elseif (($a == 1) || ($reg[2] == "")) $tag = "<$tag>";
else {
# Place here the double quote fix function.
$attrb_list=CheckQuotes($reg[2]); //extra funktion quotes beabeiten -validieren
// A VER
$attrb_list = ereg_replace("&","&amp;",$attrb_list);
$tag = "<$tag" . $attrb_list . ">";
} # Attribs in tag allowed
else $tag = "";
$tmp .= substr($str,0,$i) . $tag;
$str = substr($str,$i+$l);
}
$str = $tmp . $str;
return $str;
exit;
/* Squash PHP tags unconditionally */
$str = ereg_replace("<?","",$str);
return $str;
}
?>

c4
22.04.2003, 06:26:42
Schlagt Euch bitte draußen.

Hab das Ding ein wenig abgeändert.

<?php
$str='Es geht los. <font family="tahoma" size="1">'.
'Das <i>ist</i> ein Test zum testen eines <font'.
' size="6">T E S T E S</font> Was noch? hm... '.
'<b>Ein Semit tuts. Elli will. Ulli will es. Tut Tim es nie?</b>'.
' Das war ein Palindrom.</font><font family="'.
'courier new" size="4">So, ich hoffe das'.
'</font> reicht zum rumtesten.';
$open=0; $chars=0; $str2="";
$i=0; while ($i<strlen($str))
{
$temp=substr($str, $i, 1);
$str2.=$temp;
if ($temp=="<") { $open=1; }
if ($temp==">") { $open=0; }
if ($open==0) { $chars++; }
if ($chars==150) { echo "neu: ".$str2."<br>n"; break; }
$i++;
}
echo "alt: ".$str."<br>n";
echo $chars;
exit;
?>

Jetzt ist nur noch das Problem, dass geöffnete Tags nicht geschlossen werden, wenn die 150 Zeichen erreicht sind (bei dem Beispiel gut zu sehen). Da lässt sich aber mit regulären Ausdrücken abhelfen - wenn man es denn bringt. Diesen Part überlasse ich daher anderen.


Edit: political correctness wurde eingeführt...

|Coding
22.04.2003, 16:37:30
OT heißt Off Topic, das wiederum heißt, das ein thema nichts mit der forums kategorie hier zu tun hat und somit in das OT forum wandert.


@ c4: na, wie schlagen uns nicht, wir waren nur anderer meinung und hatten sicher beide ein knall hartes weekend.

flobee
25.04.2003, 14:20:35
Da lässt sich aber mit regulären Ausdrücken abhelfen - wenn man es denn bringt. Diesen Part überlasse ich daher anderen.

hey c4.. - ich habe die ganz zeit überlegt was du mit "regulären Ausdrücken" meinst und weiss es eigentl. immer noch nicht! :-)
oder: das alle geöffneten html TAG auch wieder sauber geschlossen werden müssen!? bedeutet das regulärer audruck:
<br> xy </br> == <br /> ? - werden br´s auch so geschlossen ?

<a name="2"> xy </a> ?

wenn dem so ist dann müsste man die open zählen und sie soweit schliessen bis alles sauber ist?

ich hab das ding so im einsatz aber muss noch mal ran:

function LimitHtmlText($mytext,$limit) {
$open=0;
$chars=0;
$newtext="";
$i=0;
while ($i<strlen($mytext)) {
$newtext.=$temp;
$temp=substr($mytext, $i, 1);
if ($temp=="<") { $open=1; }
if ($temp==">") { $open=0; }

if ($open==0) { $chars++; }

if ( (strlen($mytext)<=$limit || $chars>=$limit) && $open==0 ) {
$newtext .= $temp;
break;
}
$i++;
}
return $newtext;

}

Yzerman
25.04.2003, 14:23:53
Nee, RegExs sind was ganz anderes:
http://tut.php-q.net/regex.html

Kleiner Nachtrag noch:
<br /> ist die XHTML-konforme Schreibweise.
<br> ist HTML-konform.
XHTML-konform werden alle Tags, die nicht geschlossen werden, wie bspw. <INPUT>, <BR>, <IMG> per Leerzeichen- Slash-eckige Klammer zu am Ende geschrieben.

|Coding
25.04.2003, 17:55:52
habe ich XHTML gelesen? OK, dann ist es wieder zeit für meinen berüchtigten und hier im forum gefürchteten XHTML vs. HTML crash-kurs :-)

----


das <br> kennst du von HTML und das bewirkt einen zeilen umbruch. <br /> hingegen ist ein bestandteil von XHTML 1.0 und bewirkt das gleiche.

tip:

du solltest dir jetzt langsam angewöhnen deinen HTML code in XHTML zuschreiben, denn HTML wir nicht mehr weiter entwickelt, das heißt, HTML 5.0 wird es nicht mehr geben...

was zu XHTML 1.0:

in XHTML 1.0 werden alle tag klein geschrieben.
bsp:

HTML 4.0 = <BODY>
XHTML 1.0 = <body>

außerdem müssen in XHTML 1.0 alle singletags geschlossen werden.
bsp:

HTML 4.0 = <BR>
XHTML 1.0 = <br />

hier eine liste aller singletags:


XHTML 1.0 | HTML 4.0
------------+------------
<area /> | <AREA>
<base /> | <BASE>
<br /> | <BR>
<col /> | <COL>
<frame /> | <FRAME>
<hr /> | <HR>
<img /> | <IMG>
<input /> | <INPUT>
<isindex /> | ------- ( <INPUT> )
<link /> | <LINK>
<meta /> | <META>
<option /> | <OPTION>
<param /> | <PARAM>



attribute die nur einen wert an nehmen können, dürfen nicht mehr solo geschrieben werden.
bsp:

HTML 4.0 = <OPTION VALUE="01" SELECTED>...</OPTION>
XHTML 1.0 = <option value="01" selected="selected">...</option>


so noch was ganz wichtiges!!!
in XHTML 1.0 müssen alle werte in anführungszeichen (") stehen.
bsp:

HTML 4.0 = <BODY BGCOLOR=#123456>
XHTML 1.0 = <body bgcolor="#123456">

ich könnte das ganze hier jetzt noch ne weile ausbauen, aber ich denke mal das sollte für den anfang reichen und die forum db will ich auch nicht zusehr stressen :-)

ich hoffe das hat dir geholfen...

amerix
25.04.2003, 19:48:26
Wer vorher ordentlich mit HTML gewerkelt hat, wird mit xhtml keine Probleme haben ;-)
Apropos HTML Probleme, schau dir mal mein microCMS an ( http://www.di-m.de/cms ), der Code ist grauenhaft :-/

flobee
26.04.2003, 02:25:23
|Coding! danke für die info! sehr gut! habs mir doch fast gedacht das es in die richtung geht... bei selfhtml habe ich ähnliches gelesen. gibts dafür einen grund HTML ins "AUS" zu setzen?

gruß flobee

|Coding
26.04.2003, 11:41:00
ich würde sagen der html standard ist halt langsam überholt, darum jetzt xhtml.