# substr() bei Heise.de news...



## Vaio82 (6. Februar 2004)

Guten Abend... 

Ich habe hier ein kleines Problem....  Ich möchte die Ausgabe auf  (einen String mit) 35 Zeichen minimieren. Im Moment kann die Länge der Ausgabe variabel sein. Manchmal 20 Zeichen, manchmal 400+.

Dazu habe ich folgendes Script:


```
? 


$fcontents = join ('', file ('http://www.heise.de/newsticker/heise.rdf'));

$fcontents = str_replace ("</item>", "", $fcontents);
$fcontents = str_replace ("</link>", "", $fcontents);

$splices = explode ("<item>", $fcontents);

for ($i = 1; $i < count($splices); $i++){
	$link = explode("<link>",$splices[$i]);
	$link[1] = strip_tags($link[1]);
	
	
	
	$headline = str_replace ("<title>", "<img src=\"mark_rot.gif\" border=\"0\">&nbsp;&nbsp;<a href=\"" . trim($link[1]) . "\" target=\"_blank\"  onFocus=\"if(this.blur)this.blur()\">", $splices[$i]);
 # Ich habe mir gedacht substr("$splices[$i]",1,35); zu schreiben, jedoch treten dann Fehler in der Ausgabe auf (Mal ein <br> zu wenig, mal fehlt das Bild (<img src=\"mark_rot.gif\">) vor der Ausgabe... 
	$headline = str_replace ("</title>", "</a>"."", $headline);
	$headline = explode ("<link>", $headline);
	$headline = $headline[0];
	print $headline . '<br><br>';
}

print "</span>";

?>
```

Mein Lösungsansatz steht als Kommentar im Script.

Ich würde mich freuen, wenn mir jemand helfen würde


----------



## _voodoo (7. Februar 2004)

Was für Fehler treten denn auf ? Ich meine substr() sit eine recht einfach Lösung dafür, würde mich ärgern wenn das nicht nutzbar wäre 

Btw: substr("$splices[$i]", 0, 35); - sonst müsste dann ein Buchstabe/Zeichen am Anfang fehlen


----------



## Vaio82 (7. Februar 2004)

Habe mal ein Beispiel... 

http://www.clausgrm.com/start/heise_2.php

Die obere Version ist ohne substr().

Die untere mit substr(....,0,65); 


Man kann sehen, dass:

<br>'s fehlen
der hover nicht wirklich funktioniert
"..." gelegentlich auch weg sind...


----------



## Vaio82 (9. Februar 2004)

Hat noch Jemand eine Idee? Sollte ich es mal ganz dreist zu Heise schicken? ;o)


----------



## Sven Mintel (9. Februar 2004)

Du könntest das mit preg_replace() machen, ist für diesen Zweck besser geeignet:

```
<?php
$fcontents = join ('', file ('http://www.heise.de/newsticker/heise.rdf'));

function shorter($out)
{
	if(strlen($out)>35){$out=substr($out,0,35).'...';}return htmlentities(stripslashes($out));
}

echo preg_replace("/((.*<\/channel>|)\s*(-|)\s*<item>\s+<title>(.+?)<\/title>\s+<link>(.+?)<\/link>\s*(<\/item>|)\s*(<\/rdf:RDF>|))/se","'<img src=\"mark_rot.gif\" border=\"0\">&nbsp;&nbsp;<a href=\"'.trim('\\5').'\"target=\"_blank\"  onFocus=\"if(this.blur)this.blur()\">'.shorter('\\4').'</a><br><br>'",$fcontents);
?>
```


----------



## Vaio82 (9. Februar 2004)

Danke, dass Du Dich äußerst, jedoch gibt er mir folgenden Fehler:

Warning: Unknown modifier 'c' in /www/htdocs/v034347/start/heise.php on line 9


In Zeile 9 steht die echo-Ausgabe: echo preg_replace("/((.*</....


----------



## Sven Mintel (9. Februar 2004)

Sorry.. da hat das Forum nen paar Backslashes verschluckt 

Hab Originalcode und Ausgabe mal hochgeladen


----------



## Vaio82 (9. Februar 2004)

Du bist ein Schatz...


----------

