Salut,
Modula
erst habe ich mich ja gefragt, wieso, aber inzwischen ist es mir klar. Sonst wird die Schleife nämlich nie ausgeführt.
BendOr:
Wenn es sich nur um einen Tag handeln würde, wäre das eine praktikable Lösung. Leider habe ich noch mehr Tags, das war aus meinem Post aber auch nicht ersichtlich.
Folgendes ist jetzt meine Lösung:
Code
function dosmiliestextpart($text, $smiliesdot, $smiliessemicolon) {
$pos = strpos($text, ":", 0);
while($pos != false) {
reset($smiliesdot);
while (list ($key, $val) = each ($smiliesdot))
{
if(strtolower(substr($text, $pos, strlen($key))) == $key) {
$temp = "<img src=\"img/smilies/".$val."\" border=\"0\" alt=\"$key\" />";
$text = substr($text, 0, $pos).$temp.substr($text, $pos + strlen($key));
$pos += strlen($temp);
break;
}
}
$pos = strpos($text, ":", $pos + 1);
}
$pos = strpos($text, ";", 0);
while($pos != false) {
reset($smiliessemicolon);
while (list ($key, $val) = each ($smiliessemicolon))
{
if(substr($text, $pos, strlen($key)) == $key) {
$temp = "<img src=\"img/smilies/".$val."\" border=\"0\" alt=\"$key\" />";
$text = substr($text, 0, $pos).$temp.substr($text, $pos + strlen($key));
$pos += strlen($temp);
break;
}
}
$pos = strpos($text, ";", $pos + 1);
}
return $text;
}
function dosmilies($text) {
$smiliessemicolon = array(";)" => "smilie03.gif",
";-)" => "smilie03.gif");
// lower case for keys!
$smiliesdot = array(":)" => "smilie 01.gif",
":-)" => "smilie 01.gif",
">:)" => "smilie04.gif",
">:-)" => "smilie04.gif",
":devil:" => "smilie04.gif",
":p" => "smilie06.gif",
":-p" => "smilie06.gif",
":d" => "smilie02.gif",
":-d" => "smilie02.gif",
":-(" => "smilie05.gif",
":(" => "smilie05.gif",
":o)" => "smilie07.gif",
":o" => "smilie07.gif"
);
//
$tags = array("pre", "input");
$pos == 0;
while($pos !== false) {
$smallestpos = strlen($text);
$smallestpostag = "";
// find the first occurance of one of the $tags
for($i = 0; $i < count($tags); $i++)
{
$pos2 = strpos($text, "<".$tags[$i], $pos);
if(($pos2 > 0) && ($pos2 < $smallestpos)) {
$smallestpos = $pos2;
$smallestpostag = $tags[$i];
}
}
$temp = substr($text, $pos, $smallestpos - $pos);
$new = dosmiliestextpart($temp, $smiliesdot, $smiliessemicolon);
$text = substr($text, 0, $pos).$new.substr($text, $smallestpos);
if($smallestpostag == "") {
$pos = false;
}
else {
$pos = $pos + strlen($new);
$pos3 = strpos($text, "/>", $pos);
$pos4 = strpos($text, "<", $pos);
if(($pos3 != false) && ($pos3 < $pos4)) {
$pos = $pos4 + 2;
}
else {
$pos = strpos($text, "</".$smallestpostag, $pos);
}
}
}
return $text;
}
Alles anzeigen
Stefan