schrecke
Goto Top

Zeichen ersetzen

test_dresden_01.jpg -> Test Dresden

Hi,

also ich hab nen Bildergaleriescript und möchte, das darunter angeziegt wird, um was für eine Bild es sich handelt. Dabei sollen jedoch die Dateiendung, der Unterstrich und evtl. Nummerierungen nicht angezeigt werden.

Ich hab bissl veruscht das hin zu bekommen, aba bis jetzt es nicht geschafft. Das muss wohl mit regulären ausdrücken gemacht werden. Aba so ein Spezi in php bin ich nicht, das ich das schaffe.
Könnt ihr mir weiter helfen?

Das allerbeste wäre sowas. Unter dem Bild "test_dresden_01.jpg" wird "Test Dresden" angezeigt. Also Zahlen, Dateiendung und Unterstriche weg, sowie am besten noch den Anfangsbuchtaben jedes Wortes groß. Obwohl, wenn letzteres zu viel Aufwand ist, wäre das nicht allzu schlimm, da ich die Bilder auch in Großschreibung abspeichern könnte.

Ich danke euch face-smile

schrecke
[EDIT 19.06.2007]
Thread gelöst und geschlossen
masterG(Moderator)

Content-ID: 61057

Url: https://administrator.de/contentid/61057

Ausgedruckt am: 05.11.2024 um 14:11 Uhr

fachinformatiker
fachinformatiker 11.06.2007 um 15:28:05 Uhr
Goto Top
Google->PHP zeichen ersetzen oder php text ersetzen hilft.
Yahoo oder ähnliche übrigens auch.
Hier einmal vorgekaut:
$text="test_dresden_01.jpg";
$textneu="";
$array=split($text);
foreach($array as $wort)
{

if($wort==".") #einziger Haken:ich setze hier vorraus, dass im Dateinamen kein Punkt ist(außer eben die Endung)
{break;}
$textneu.=$wort;
}
$array=explode($textneu,"_");
$textneu="";
foreach($array as $wort)
{
$textneu.=ucfirst($wort)." ";
}
$textneu=rtrim($textneu);
echo $textneu; #Rückgabe:"Test Dresden"

Da, wenn du es jetzt nicht schaffst... ;)
schrecke
schrecke 11.06.2007 um 16:09:43 Uhr
Goto Top
nee so einfach is das ni mit google und dem Rest, denn das was ich suche findet man ni so schnell, vor allem ni wenn man ni viel Ahnung hat.

Danke dir für den Code, aba das geht irgendwie ni, da bekomm ich 5 Fehler:

Warning: Wrong parameter count for split() in E:\Other\xampp\htdocs\datei.php on line 4

Warning: Invalid argument supplied for foreach() in E:\Other\xampp\htdocs\datei.php on line 5

Warning: explode() [function.explode]: Empty delimiter. in E:\Other\xampp\htdocs\datei.php on line 11

Warning: Invalid argument supplied for foreach() in E:\Other\xampp\htdocs\datei.php on line 13

weißt du woran das liegen kann?
Dani
Dani 11.06.2007 um 17:54:18 Uhr
Goto Top
Moin ihr beide,
so, ich habe auch noch eine kl. Lösung auf dem Herzen. face-smile

# Exmaple: Bildname
$pic_name="test_dresden_01.jpg";  


# Filtert Leerzeichen, Nummerierung und Dateiendung
$pic_name=preg_split("/[_]/", $pic_name);  
$filter_nums=array_pop ($pic_name);

# Erzeugt aus dem Array einen String
foreach($pic_name as $string)
	{
	 $picname.=" ".$string;  
	
	}

# Ausgabe des neuen Namens
echo $picname;
Der Vorteil meiner Methode ist, dass die Bilder auch "test_dresden_versuch_01.jpg heißen können. Sprich es wird immer die Zahl und die Endung (egal welche -jpg, jpeg) abgeschnitten.


Gruß
Dani
schrecke
schrecke 11.06.2007 um 18:33:51 Uhr
Goto Top
super, das geht. Danke dir Dani. Ich hab noch den Teil $picname.=" ".$string; in $picname.=" ".ucfirst($string); geändert, damit die Anfangsbuchstaben groß sind. Jetzt ist mir aber was aufgefallen, woran ich ni gedacht hab. Kannst du mir das ganze noch für Umlaute einbauen? Ergo das ae zu ä usw. wird?

Das wär klasse face-smile
Dani
Dani 11.06.2007 um 19:00:36 Uhr
Goto Top
Schln zuhören...daran habe ich nicht mehr gedacht. face-smile
Na gut, weil heute Montag ist und ich gut drauf bin hier noch die kl. Erweiterung:
# Exmaple: Bildname
$pic_name="täst_dresden_01.jpg";  

#Ersetzt alle Sonderzeichen
$sonder_char=array(
	"1" => array("ä", "ö", "ü", "ß"),  
	"2" => array("ae", "oe", "ue", "ss")  
);

for ($i=0;$i < 4;$i ++)
{
	$pic_name=str_ireplace($sonder_char["1"][$i], $sonder_char["2"][$i], $pic_name);  
}

# Filtert Leerzeichen, Nummerierung und Dateiendung
$pic_name=preg_split("/[_]/", $pic_name);  
$filter_nums=array_pop ($pic_name);

# Erzeugt aus dem Array einen String
foreach($pic_name as $string)
    {
     $picname.=" ".ucfirst($string);  
    
    }

# Ausgabe des neuen Namens
echo $picname;
Ungeteste Skizze!


Gruß
Dani
schrecke
schrecke 11.06.2007 um 19:35:52 Uhr
Goto Top
feini dank dir face-smile

jetzt brauch ich nur noch eins und zwar das Bild wird an einer anderen Stelle eingestellt, als die Beschreibung dazu. Ergo muss ich ja auch an einer anderen Stelle die Funktion für den Namen aufrufen. Kann man Variablen an eine Funktion übergeben? Ich sollte vlt. noch sagen das ich die Funktion in ner ...inc.php liegen hab
Dani
Dani 11.06.2007 um 19:45:42 Uhr
Goto Top
n einer anderen Stelle die Funktion für den Namen aufrufen
Du hast also meine Zeilen in eine Funktions gepackt?!

man Variablen an eine Funktion übergeben?
Klar, sonst gäbe das keinen Sinn! Beispiel:
function NAME($name)
{
  echo $name;
}
....
NAME("test");  

Gruß
Dani
schrecke
schrecke 11.06.2007 um 20:09:04 Uhr
Goto Top
also bei mir ist das so derzeit.

es wird ne function geladen (image_random) welche das Bild (<img .../>) generiert. So. Derzeit ist deine Funtion da noch mit eingaut, was aba so wahrscheinlich nicht geht, weil ...
So, nun möchte ich jedoch an anderer Stelle auf der Seite den Bildertitel laden. So und da muss ich doch irgendwie das ergebnis der Funktion image_random an die function picture_name (Bsp. mal für das generieren des Bildertitels) geben.

Noch was. Ich bau das ganze in en Forum ein. Das aufrufen der function für das Bild wird in der template-datei gemacht, in Mitten von html (Also einfach <?php ... ?>) rein geschrieben. Und nun will ich später an anderer Stelle, den Namen aufrufen.
schrecke
schrecke 11.06.2007 um 20:24:52 Uhr
Goto Top
so hier mal der Code vom Bildgenerator.
das Session_start am Anfang ist ausgeklammert, da das mit dem Board-Sessionmanagement nicht geht (war dafür gedacht, pro Session nur ein Bild zu haben, und nicht bei jedem click ein neuen Bild)

// @session_start();

function start()
{
    //This is the directory route to the folder
	$directory="./images/image_random/header/";  

	if (!$_SESSION['PicFilename'])  
	{
	         $dir=opendir( $directory );

	         //This is a relative link to the directory if it is not in the same directory as the file you are displaying the images on

	         $pattern="\.(gif|jpg|jpeg|png|bmp|swf)$";  
	         if(!$dir)
	         {
	         	die("Fehler, kein Bild vorhanden oder php-Fehler");  
	         }
	         $s=readdir($dir);
	         $count="0";  
	         $image;
	         while($s)
	         {
	         	if(ereg($pattern, $s))
	         	{
	         	$image[$count]=$s;
	         	$count++;
	         	}
	         	$s=readdir($dir);
	         }
	         closedir($dir);
                  // Ausgabe
	         $limit=count($image);
	         $limit--;
	         $randNum=rand(0,$limit);
	         $size=getimagesize("$directory$image[$randNum]");  

			 $_SESSION['PicFilename'] 	= $image[ $randNum ];  
			 $_SESSION['PicSize']		= $size[ 3 ];  
	}

	// building the img-tag; first creating a template string for a later replacing with real values
         // aus originalem Link "{SIZE}" entfernt 
	$imgTemplate = "<img src=\"{SOURCE}\" alt=\"Zufallsbild aus Dresden: {IMGNAME}\" border=\"0\" width=\"953px\"/>";  

	// building the search patterns including key values of the template string
	$searchPattern = 	array( '{SOURCE}', '{SIZE}', '{IMGNAME}' );  
	$replacePattern = 	array( 	$directory . $_SESSION['PicFilename'],  
								$_SESSION['PicSize'],  
								$_SESSION['PicFilename'] );  

	$imgLink = str_replace( $searchPattern, $replacePattern, $imgTemplate );
         echo $imgLink; 
}

Was hier kursiv steht, ist normal ausgklammert mit / /
[Edit 11.06.2007 20:28]
Ich habe den PHP-Code in einen Coodeblock gepackt. Das macht die ganze Sache ein bisschen übersichtlicher. face-smile

Dani
(Moderator)
Dani
Dani 11.06.2007 um 20:31:53 Uhr
Goto Top
Es müssste reichen, wenn du am Ende folgende Zeile hinzufügst:
...
return $_SESSION['PicFilename']  
}
Somit wird der Name zurückgegeben. Aufruf:
...
$file_name=start();
..
JEtzt steht in der Vari der Filename. Diesen kannst du nun weiter verwerten. face-smile


Gruß
Dani
schrecke
schrecke 11.06.2007 um 20:34:20 Uhr
Goto Top
werd ich versuchen, danke dir face-smile

@ dein edit: ich hab das mit dem code auch versucht, nur war das bei mir alles auf einer Zeile, zwar bund aba ... kA, nur so ;)
schrecke
schrecke 11.06.2007 um 21:55:25 Uhr
Goto Top
so face-smile, also das geht jetzt soweit. Zwar etwas anders, aba es geht face-smile

Nur ein Problem hab ich jetzt, nicht alle Bildernamen werden korrekt generiert. Ich zähl das gleich mal direkt auf:

"haus_des_buches.jpg" wird zu "Haus Des"
"goldener_reiter.jpg" wird zu "Goldener"
"zwinger.jpg" wird gar nicht abgezeigt
"kongresszentrum.jpg" wird gar nicht angezeigt

Im Quelltext sieht es genauso aus. Kannst du dir erklren, woran das liegt? Da kommt auch noch bei weiteren Bildern vor.
Ach und das passiert sowohl, wenn die die Namens-Funktion in die Random-Funktion intergriere, als auch wenn ich die auslagere.

soweit, schrecke
Dani
Dani 11.06.2007 um 22:11:02 Uhr
Goto Top
So schrecke,
das war mein Fehler. Ich habe vergessen, den Punkt und die Zahlen auszuschließen. Hier die Version v0.4:
<?php

#Exmaple: Bildname
$pic_name="kongresszentrum_1331.jpg";  

#Ersetzt alle Sonderzeichen
$sonder_char=array(
    "1" => array("ä", "ö", "ü", "ß"),  
    "2" => array("ae", "oe", "ue", "ss")  
);

for ($i=0;$i < 4;$i ++)
{
    $pic_name=str_ireplace($sonder_char["1"][$i], $sonder_char["2"][$i], $pic_name);  
}

# Filtert Leerzeichen, Nummerierung und Dateiendung
$pic_name=preg_split("/[_.0123456789]/", $pic_name);  
$filter_nums=array_pop ($pic_name);

# Erzeugt aus dem Array einen String
foreach($pic_name as $string)
    {
     $picname.=" ".ucfirst($string);  
    
    }

# Ausgabe des neuen Namens
echo $picname;
Also bei mir funktioniert alles wunderbar. Mach noch ein paar Tests und gib uns einfach Rückmeldung.


Gruß
Dani
schrecke
schrecke 11.06.2007 um 22:25:41 Uhr
Goto Top
joa super, klappt alles.

Ich danke dir.

//schrecke
schrecke
schrecke 12.06.2007 um 10:45:15 Uhr
Goto Top
so ich noch mal wieder ... es hört ni auf :D

Da mit den Umlauten ersetzten geht natürlich super, jedoch gibts n Problem bei bestimmten Namen, was ich vorher nicht bedacht habe.
Nebenbei noch, dein Code - "1" => array("ä" , "ö" , "ü"), "2" => array("ae", "oe", "ue") - hab ich umgedreht. Denn die Dateinamen werden ohne umlaute geschrieben, jedoch sollen ja die Namen auf der Homepage mit Umlauten, sofern vorhanden, da stehen. Das geht auch super. glaeserne_man...jpg wird zu Gläseren Manufa... .

Jetzt gibts aba n weiteres Problem. Z.B. die FraUEnkirche oder Das BlaUE Wunder ... der werden nun auch Umlaute rein geschrieben, was ni wirklich sein soll, klar. Kann man irgendwie Asunahmen bestimmten? Ich hatte mir das schon so gedacht und es folgender Maßen probiert:

"1" => array("ae", "oe", "ue", "axxe", "oxxe", "uxxe", "sxxs"),
"2" => array("ä" , "ö" , "ü" , "ae" , "oe" , "ue" , "ß")

Das funktioniert jedoch leider irgendwie ni risch. Lokal im Backup-Forum fuktioniert es nur bei "das BlaUE Wunder" (das_blaue_wunder.jpg) und "FraUEnkirche" (frauenkirche.jpg). Jedoch bei "GroSSer Garten" nicht.
Und online, im realen Forum, funktioniert das überhaupt nix. Da werden die Namen fein mit "xx" geschrieben. Ist die Lösung die ich da versucht hab einfach nicht optimal?

Aba um bestimmte Namen von der Umbenennung auszuschließen, muss ich ja irgendein Hinweiß im Namen geben. Anders hatte ich bis jetzt keine Idee.

Ich glaub das es wäre ja fast sinnvoller, die Beschreibung zu nem Bild extern zu laden oder? Da spart man sich das ganze umgebaue der Namen. Also das in ner Datei steht: blaues_wunder_jpg => "Das wunderschöne Blaue Wunder" oder sowas. Weiß ni ...

soweit
Dani
Dani 12.06.2007 um 12:47:42 Uhr
Goto Top
Moin,
Nebenbei noch, dein Code - "1" => array("ä" , "ö" , "ü"), "2" => array("ae", "oe", "ue") - hab
ich umgedreht. Denn die Dateinamen werden ohne umlaute geschrieben, jedoch sollen ja die
Namen auf der Homepage mit Umlauten, sofern vorhanden, da stehen. Das ### auch super.
glaeserne_man...jpg wird zu Gläseren Manufa... .
Ich dachte, du wolltest ä,ö,ü ersetzen durch die entsprechenden Zeichen?! Egal...ich habe mich vielleicht auch verlesen!
Das Problem habe ich noch gar nie in Augenschein genommen. So auf den 1. bzw 2. weiß ich auch keine Idee, wie du das Problem beheben könntest. Wenn dann müsstest du deinen kompletten Duden hinterlegen => viel Spaß beim Tippen. face-smile

Ich glaub das es wäre ja fast sinnvoller, die Beschreibung zu nem Bild extern zu laden oder?
Da spart man sich das ganze umgebaue der Namen. Also das in ner Datei steht:
blaues_wunder_jpg => "Das wunderschöne Blaue Wunder" oder sowas. Weiß ni ...
Würde ich so machen, da deine Dateinamen wirklich extrem variieren.


Gruß
Dani
schrecke
schrecke 12.06.2007 um 13:27:14 Uhr
Goto Top
mh hast du da ne Lösung parat, wie man sowas anstellt?

Und hast du ne Idee, warum das mit dem "axxe wird zu ae" nicht funktioniert?
Dani
Dani 12.06.2007 um 13:30:36 Uhr
Goto Top
mh hast du da ne Lösung parat, wie man sowas anstellt?
Ne, leider nicht!

Und hast du ne Idee, warum das mit dem "axxe wird zu ae" nicht funktioniert?
Hast du an der for - Schleife die "4" ersetzt duch die Anzahl der Sonderzeichen?!


Gruß
Dani
schrecke
schrecke 12.06.2007 um 13:47:33 Uhr
Goto Top
ahhhh ... *weg renn* :D ... nein das hab ich nicht gemacht, mist.

Ok nun ist endgültig alle super und läuft so wie es sein soll face-smile