umlaute von wörtern aus txt-datei umwandeln

::emanuel::

Erfahrenes Mitglied
problem mit umlauten & case funktion

ich habe da ein problem mit den umlauten:
in der datei menue.txt sind gewisse wörter gespeichert.
so, diese wörter will ich jetzt aber mit links verwenden. da aber manche wörter umlaute haben, geht das nicht.
ich habe folgenden code:

PHP:
<?php include "kopf.php"; ?>

<?php $fp = fopen ("menue.txt","r");
if ($fp)
{
    while(!feof($fp)) 
    {
    $zeile = fgets($fp); 
echo "<tr><a href=\"index.php?seite=$zeile\">
		<td height=\"20\" onmouseover=\"this.style.backgroundColor='#D8E6EE'\"
		onmouseout=\"this.style.backgroundColor='#FFE8A2'\"><a href=\"index.php?seite=$zeile\">&nbsp;$zeile</a></td></a>
	  </tr>
	  <tr>
		<td><img src=\"img/white.gif\" width=\"181\" height=\"1\"></td>
	  </tr>"; 
    }
fclose($fp);
}
else
	{
echo "Datei wurde nicht gefunden";
	}
?>

<?php include "anschrift.php"; ?> 

<?php    
    switch($_GET['seite'])
    {
        case "$zeile": include("$zeile.txt");
            break;
        default: include("home.txt");
            break;
    }
?>

<?php include "fuss.php"; ?>

ich möchte jetzt, dass ich mit zwei variablen arbeiten kann. eine variable soll das wort aus der menue.txt unverändert sein. die andere variablen sollen aber die wörter mit umgewandelten umlauten sein, das heißt aus ä wird ae, aus ö wird oe usw...

ich hab mich schon im suchbereich ein wenig umgeschaut....
ich bin da auf folgendes gestoßen:

kann es sein, dass es mit
PHP:
$zeileneu = str_replace("ä","ae",$zeile);
zu lösen wäre

oder hat es vielleicht irgendwas mit
PHP:
htmlspecialchars(); htmlentities()
oder
PHP:
urlencode()
urldecode()

zu tun? wie oder wo muss ich aber diese funktion einsetzen?

ich hab da aber noch ein anliegen:
im zweiten bereich meines quelltextes seht ihr
PHP:
        case "$zeile": include("$zeile.txt");
            break;
        default: include("home.txt");
            break;

ich möchte jetzt, dass das wort aus der menue.txt automatisch auch der link wird. ich habs schon hinbekommen (wie gesagt ohne rücksicht auf die umlaute), aber das problem ist, dass der link nur beim letzten punkt im menü richtig funktioniert. (ich füge ja neue punkte mit:
PHP:
echo "<tr><a href=\"index.php?seite=$zeile\">
		<td height=\"20\" onmouseover=\"this.style.backgroundColor='#D8E6EE'\"
		onmouseout=\"this.style.backgroundColor='#FFE8A2'\"><a href=\"index.php?seite=$zeile\">&nbsp;$zeile</a></td></a>
	  </tr>
dazu)

wie aber kann man es berücksichtigen, dass jeder menüpunkt auch ein eigender case ist?

ihr wärt mir eine große hilfe. dann würde ich echt wunschlos glücklich sein :)

lg
emanuel
 
Zuletzt bearbeitet:
hi leute!

habt ihr echt keine erfahrung mit umlauten?
ich mein, ihr könntet mir auch nur links posten, wo man sich informieren kann. wäre nett.

cu
emanuel :)
 
hi,
Umlaute kennich nett. Da ich nur US-Layout auf meiner Tastatur hab :-)

Du laesst einfach die Links durch ne Funktion laufen und ersetzt dabei die ä, ö, ü durch ae, oem ue:
(checkLinks.inc)
PHP:
<?php
	function checkLink( $content ) {
		$content = str_replace( "ä", "ae", $content );
		$content = str_replace( "ö", "oe", $content );
		$content = str_replace( "ü", "ue", $content );
		
		return $content;
	}
?>

die rufst du dann bevor du die Links ausgibst auf:
PHP:
<?php
	# checkLinks.inc includen
	include("checkLinks.inc");

	# Variable fuer den Inhalt der Links.txt
	var $links

	# hier der code zum Einlesen
	# bla bla bla

	$links = checkLink( $links );
?>

Wenn du jetzt willst, das eine Variable nicht veraendert wird, uebergib der Funktion einen 2. Paramter mit dem Original Text!

Was du allerdings mit dem case da wissen willst versteh ich nett. Kannst du das vielleicht genauer beschreiben???
 
Zuletzt bearbeitet:
danke dir kimble einstweilen für deine hilfe! das mit den umlauten funktioniert jetzt einwandfrei. :)

ich habs so gelöst:

PHP:
<?php
	include("checkLinks.inc");
	$fp = fopen ("links.txt","r");
	$fo = fopen ("links.txt","r");
if ($fp)
{
    while(!feof($fp)) 
    {
    $links = fgets($fp);
    $links = checkLink( $links );
    $linksalt = fgets($fo);
echo "<tr><a href=\"index.php?seite=$links\">
		<td height=\"20\" onmouseover=\"this.style.backgroundColor='#D8E6EE'\"
		onmouseout=\"this.style.backgroundColor='#FFE8A2'\">&nbsp;<a href=\"index.php?seite=$links\">$linksalt</a></td></a>
	  </tr>
	  <tr>
		<td><img src=\"img/white.gif\" width=\"181\" height=\"1\"></td>
	  </tr>"; 
    }
fclose($fp);
}
else
	{
echo "Datei wurde nicht gefunden";
	}
?>

ich hab auch noch aus ß - ss gemacht und aus einem leerzeichen ein "-"

das mit dem case-befehl hab ich so gemeint:

jeder menüpunkt in der links.txt soll auch ein eigener case sein. wie macht man das?

ich hab gedacht, man erreicht dies, indem man einfach

PHP:
        case "$links": include("$links.txt");
            break;

schreibt. das funktioniert aber nicht so ganz. er includet nur den letzten menüpunkt. was mach ich falsch?
das mit $links.txt ist so gemeint, dass er eine txt-datei includet die man vorher erstellt, wo dann der inhalt drinnen ist.
 
sry hab eben gemerkt was falsch ist. wenn du eine Variable behalten willst, mach das einfacher so:
PHP:
<?php
	function checkLinks( $content ) {
		var $newContent;

		$newContent = $content;

		$newContent = str_replace( "ä", "ae", $content );
		$newContent = str_replace( "ö", "oe", $content );
		$newContent = str_replace( "ü", "ue", $content );

		return $newContent;
	}
?>

dann so aufrufen:
<?php
	include("checkLinks.inc");

	var $links;
        # Links einlesen...

	$newLinks = checkLinks( $links );
?>

Hab imho leider nich viel Zeit, ich versuch dir heut Abend noch das mit den case zu sagen :(
 
ich hab mir mal den quelltext angeschaut, den php dann ausgibt....
kann es sein, dass das mit dem case deshalb nicht funktioniert, weil im quelltext eine neue zeile angefangen wurde:

PHP:
<a href="index.php?seite=Anmeldeformular
">
??

beim letzten menüpunkt aber in der zeile weitergeschrieben wird:

PHP:
<a href="index.php?seite=Ueber-uns">

weshalb diese mysteriöse ausgabe mit einer neuen zeile im quelltext??

ich hab nochmal meine quelltexte angehängt, vielleicht schaut sie ja irgendwer an. wäre nett. :)
 

Anhänge

ojeoje,
ich hab mich wohl zu früh gefreut... auf meinem lokalen computer funktioniert es (bis auf den case), aber sobald ich es mir auf den server geladen hab und online angeschaut hab, funktionierts nicht (er zeigt nicht alles an und lädt ins unendliche.

hier nochmal die index.php:

PHP:
<?php include "kopf.php"; ?>

<?php
	include("checkLinks.inc");
	$fp = fopen ("Links.txt","r");
	$fo = fopen ("Links.txt","r");
if ($fp)
{
    while(!feof($fp)) 
    {
    $links = fgets($fp);
    $links = checkLink( $links );
    $linksalt = fgets($fo);
echo "<tr><a href=\"index.php?seite=$links\">
		<td height=\"20\" onmouseover=\"this.style.backgroundColor='#D8E6EE'\"
		onmouseout=\"this.style.backgroundColor='#FFE8A2'\">&nbsp;<a href=\"index.php?seite=$links\">$linksalt</a></td></a>
	  </tr>
	  <tr>
		<td><img src=\"img/white.gif\" width=\"181\" height=\"1\"></td>
	  </tr>"; 
    }
fclose($fp);
}
else
	{
echo "Datei wurde nicht gefunden";
	}
?>

<?php include "anschrift.php"; ?> 


<?php
    switch($_GET['seite'])
    {
        case "$links": include("$links.txt");
            break;
        default: include("home.txt");
            break;
    }
?>

<?php include "fuss.php"; ?>


wenn mir hier jemand aus der patsche helfen könnte, wär ich ihm wirklich was schuldig! :)

lg
emanuel
 
ich hab jetzt folgenden code:

PHP:
<?php include "kopf.php"; ?>

<?php
	include("checkLinks.inc");
	$fp = fopen ("Links.txt","r");
if ($fp)
{
    while(!feof($fp)) 
    {
	$linksalt = fgets($fp);
    $links = checkLink( $linksalt );
echo "<tr><a href=\"index.php?seite=$links\">
		<td height=\"20\" onmouseover=\"this.style.backgroundColor='#D8E6EE'\"
		onmouseout=\"this.style.backgroundColor='#FFE8A2'\">&nbsp;<a href=\"index.php?seite=$links\">$linksalt</a></td></a>
	  </tr>
	  <tr>
		<td><img src=\"img/white.gif\" width=\"181\" height=\"1\"></td>
	  </tr>"; 
    }
fclose($fp);
}
else
	{
echo "Datei wurde nicht gefunden";
	}
?>

<?php include "anschrift.php"; ?> 


<?php
    switch($_GET['seite'])
    {
        case "$links": include("$links.txt");
            break;
        default: include("home.txt");
            break;
    }
?>

<?php include "fuss.php"; ?>

also ohne das $fo und es funktioniert aber trotzdem nicht.

ich hab mir mal den quelltext während des ladens angeschaut und dort ist immer der gleiche error drinnen, und zwar folgender:

Warning: Wrong parameter count for fgets() in /home/index.php on line 10.

die 10. zeile ist folgende:

$linksalt = fgets($fp);

was ist da falsch??
helft mir plz
 
hi leute!

ich hab jetzt
PHP:
	$linksalt = fgets($fp, 100);
genommen und es funktioniert.
naja, bis auf den case - kapiert da jemand was ich meine, oder soll ich's nochmal erklären??

lg
 
Zuletzt bearbeitet:
Zurück