Spezielles Suchen-Skript!?

Miraculixx

Erfahrenes Mitglied
Hi!

Ich habe ein sehr spezielles Problem:

Ich habe einen Text in einer Variable ($text)
In diesem Text möchte ich, ab einer bestimmten Position beginnend ($pos) die Position eines von mehreren Zeichen suchen, das als nächstes kommt.

Zur lieichteren Verständnis ein Beispiel:

$text = "asdf\nblabla\rxxxx blabla";
$pos = 7;

zu suchende Zeichen: "\n", "\r", " "

Die Suche soll in diesem Fall an Position 7 beginnen, und soll dann in diesem fall den wert 13 zurückliefern, weil dort das zeichen "\r" ist.

wenn $pos jetzt aber 15 wäre, dann soll die funktion 19 zurückliefern, weil dort das leerzeichen ist.
und wenn $pos 0 ist, dann soll die funktion 5 zurückliefern, weil dort "\n" ist.
und jetzt der überclou: wenn $pos 21 ist, dann soll die funktion keinen fehler machen, sondern zum beispiel false zurückgeben.

ich habe versucht, diese funktion selbst auszuprogrammieren (mit vielen if und strpos) allerdings funktioniert das nicht so recht... und im internet hab ich auch sonst nichts mehr gefunden.

Ich hoffe mei Problem ist halbwegs verständlich...
Und ich hoffe es kann mir jemand weiterhelfen :)
 
Meinst du soetwas in der Art?

PHP:
<?
$text = "asdf\nblabla\rxxxx blabla";
$pos = 7;

$what = array("\n","\r"," ");

foreach($what as $search)
{
	$searchpos = $pos;
	$durchlauf = true;
	
	while($durchlauf)
	{
		if($found = strpos($text, $search, $searchpos))
		{
			echo "gefunden an Position ".$found."(Ende: ".($found + strlen($search)).")<br />";
		}
		else
		{
			$durchlauf = false;
		}
		
		$searchpos = $found + strlen($search);
	}
}
?>
 
Herzlichen Dank für das Skript, aber so ganz kann ich es noch nicht benutzen.
Naja, hier mal die ganze Wahrheit: Ich möchte in einem Text alle Links, die rein als Text drin stehen (also zum beispiel http://www.google.at) durch echte Links ersetzen (also den <a>-Tag hinzufügen).

Das Problem ist jetzt, dass in dem Text beliebig viele Links vorkommen können und nach einem Link kann entweder ein Newline sein, oder auch ein Leerzeichen, oder der text ist danach aus (also nix mehr danach)

die überprüfung, ob http:// schon dabei ist, kann man mal weg lassen - es sollen vorerst NUR links umgewandelt werden, die mit http:// beginnen.

Naja, das skript, das ich dafür momentan verwende, funktioniert noch nicht ganz fehlerfrei, und ist außerdem ein programmiertechnisches verbrechen ist! (also bitte nicht von dieser funktion auf meine programmierkünste schließen ;))
PHP:
function replace_links($text)
{
  $text = $text." \n\r";
  
  $pos = strpos($text, "http://");
  while($pos !== false)
  {
    $pos2a = strpos($text, "\n", $pos);
    $pos2b = strpos($text, "\r", $pos);
    $pos2c = strpos($text, " ", $pos);
    if($pos2a < $pos2b)
      $pos2 = $pos2a;
    else
      $pos2 = $pos2b;
    if($pos2c < $pos2)
      $pos2 = $pos2c;
    
    $link = substr($text, $pos, $pos2 - $pos);
    $text = substr($text, 0, $pos)."<a href='".$link."'>".$link."</a>".substr($text, $pos2);
    
    $pos3 = $pos + 15 + strlen($link) * 2;
    $pos = strpos($text, "http://", $pos3);
  }
	return $text;
}

weiters habe ich noch ein anderes skript im netz gefunden, was jedoch auch nicht so zu 100% funktioniert (und um einiges komplizierter ist, dafür etwas schöner...)
PHP:
$text="In diesem http://Board.de kann jeder seine Vorschläge nennen. Diese werden dann von einem Mod oder Admin ins entsprechende www.Board.de übernommen.";
$arr=array();
$arr2=array();
$arr = explode (" ", $text); 
foreach($arr as $elem){
if(ereg("^www.",$elem)){
$arr2[]='<a href="http://'.$elem.'">'.$elem.'</a>';
}elseif (ereg("^http://",$elem)){
$arr2[]='<a href="'.$elem.'">'.$elem.'</a>';
}else{
$arr2[]=$elem;
}
}
$text=implode(" ",$arr2);
echo $text;

naja, ich weiß nicht mehr recht weiter, ich hoffe es kann mir jemand helfen.

Thx
Miraculixx
 
Um URLs zu Links werden zu lassen, kannst du ganz einfach RegExp nehmen. Da kannst du dir das ganze gefummele sparen.
PHP:
$string=eregi_replace("([ \r\n])http://([^ ,\r\n]*)","\\1<a href=\"http://\\2\">\\2</a></a>",$string);
$string=eregi_replace("([ \r\n])https://([^ ,\r\n]*)","\\1<a href=\"https://\\2\">\\2</a>",$string);
$string=eregi_replace("([ \r\n])ftp://([^ ,\r\n]*)","\\1<a href=\"ftp://\\2\">\\2</a>",$string);
$string=eregi_replace("([ \r\n])www\\.([^ ,\r\n]*)","\\1<a href=\"http://www.\\2\">\\2</a>",$string);

$string=eregi_replace("^http://([^ ,\r\n]*)","<a href=\"http://\\1\">\\1</a>",$string);
$string=eregi_replace("^https://([^ ,\r\n]*)","<a href=\"https://\\1\">\\1</a>",$string);
$string=eregi_replace("^ftp://([^ ,\r\n]*)","<a href=\"ftp://\\1\">\\1</a>",$string);
$string=eregi_replace("^www\\.([^ ,\r\n]*)","<a href=\"http://www.\\1\">\\1</a>",$string);
Der zweite Teil dürfte nicht so wichtig sein. Eher die ersten 4.
 
Zuletzt bearbeitet:
Herzlichen Dank, aber das ist leider nicht das, wonach ich suche ;)
Ich möchte internet-adresse in links umwandeln - nix mit email :)

vlt. hat noch jemand eine lösung?
ansonsten werde ich versuchen, diese email-umschreib-funktion etwas umzuformulieren... oder vlt. findet sich auch noch im web was.. mal sehen..
 
Wenn du mir jetzt noch sagst, wie ich gerade auf eMails komme *kopfschüttel*. Habe den Beitrag oben editiert.
 
fanste hat gesagt.:
Um eMail adressen zu Links werden zu lassen, kannst du ganz einfach RegExp nehmen. Da kannst du dir das ganze gefummele sparen.
...
Der zweite Teil dürfte nicht so wichtig sein. Eher die ersten 4.

Naja, wenn du von e-Mail Adressen sprichst... :)
 
Ich habe nur vergessen das noch zu ändern. Aber ich frage mich echt, wie ich auf eMail Adressen gekommen bin. Stand hier doch nirgends ein Wort davon. (Vll weil der Post davor um Mails ging :confused: )
 
Hehe, ich hab mich auch ziemlich gewundert... :)
Aber mit dem kann ich jetzt was anfangen. Herzlichen Dank!!

Lg
Miraculixx
 
Zurück