Thema: Array & Groß- und kleinschreibung

Hi!

ich habe folgendes Array:

$menueStruktur = array("Unternehmen" => array("unternehmen" => array("Anfahrtsbeschreibung" => "anfahrtsbeschreibung",
                                                                        "Ansprechpartner"         => "ansprechpartner",
                                                                        "Geschichte"             => "geschichte", 
                                                                        "Fachbereiche"             => "fachbereiche",
                                                                        "Qualitätsmanagement"     => "qualitaetsmanagement",
                                                                        "Service"                => "service")
                            ),
                             "Produkte" =>     array("produkte"     => array("Schwingungstechnik"     => "schwingungstechnik",
                                                                        "Kompensatoren"         => "kompensatoren",
                                                                        "Laermschutzsysteme"     => "laermschutzsysteme",
                                                                        "Profile und Fender"     => "profile_und_fender",
                                                                        "Antriebselemente"         => "antriebselemente",
                                                                        "Spezialdichtungen"     => "spezialdichtungen")
                          ),
                            "Vertrieb" =>     array("vertrieb"     => array("Niederlassung Berlin" => "niederlassung_berlin",
                                                                        "Niederlassung Hannover"=> "niederlassung_hannover",
                                                                        "Vertriebspartner"         => "vertriebspartner",
                                                                        "Vertretungen"             => "vertretungen")
                          ),
                            "Aktuelles" =>     array("aktuelles"     => array("Produktneuheiten"     => "produktneuheiten",
                                                                        "Messen"                 => "messen",
                                                                        "Presse"                 => "presse",
                                                                        "Internes"                 => "internes")
                          )
             );

daraus generiere ich einerseits die sichtbare Navigation (Großgeschrieben) und andererseits die Pfadzuweisungen (kleingeschrieben). Das kann man bestimmt auch anders regeln...
Das Array wird sich noch weiter aufblähen und ich suche nach einer Möglichkeit die großgeschriebenen Navigationspunkte mit einem kleinen Befehl zu kleingeschriebenen Daten zu machen, damit ich diese für Pfadzuweisungen benutzen kann....

wie ich mich kenne brauche ich Stunden um den korrekten Befehl bei php.net zu finden...vielleicht kann das ja jmd. so aus dem Stehgreif?

schöne Grüße

2

Re: Array & Groß- und kleinschreibung

Hi Kaplar,

meinst du den Befehl da:
http://de.php.net/strtolower ?

Die könnte auch noch hilfreich sein:
http://de.php.net/manual/de/function.ucfirst.php

HTH, tink

[edit]
grad noch eine Funktion gefunden:
http://de.php.net/manual/de/function.array-walk.php
Da müsstest Du Dir nur eine entsprechende Funktion anlegen, die Dir Deine Werte entsprechend umbaut
[/edit]

Beleidigungen sind die Argumente derer, die keine Argumente haben

3

Re: Array & Groß- und kleinschreibung

Hi

vielleicht kommst du besser durch, wenn du etwa folgende Struktur verwendest:

$sitemap = array('home'        = array ('title'  = 'Startseite',
                                        'parent' = ''),
                 'unternehmen' = array ('title'  = 'Unternehmen',
                                        'parent' = 'startseite'));

Damit bleibst du flexibel, da jede Seite um beliebige Attribute erweitert werden kann und ich finde es schlicht übersichtlicher.

Mit der "machs einfach lowercase"-Idee kannst du leicht Probleme mit Sonderzeichen bekommen, die im Seitentitel erwünscht, in der ID der Seite jedoch vielleicht nicht sinnvoll sind (Umlaute, Slashes etc.).

Basti

Re: Array & Groß- und kleinschreibung

Hi Tink!

ja danke, genau das brauche ich! smile

foreach ($menueStruktur as $k => $v){
                                //setlocale(LC_CTYPE, 'ar_SA');
                                $pfad1 = strtolower($k);
                                $pfad2 = str_replace(" ","_",$pfad1);
                                $pfad3 = str_replace("ä","ae",$pfad2);
                                    echo ('
                                        <tr>
                                            <td width="150" height="25" bgcolor="#189CBE"><div class="linkeNavi1"><a onfocus="this.blur();" href="'. $absPath . $pfad3 .'/'. $pfad3 . '.php4">'.$k.'</a></div></td>
                                        </tr>
                                        <tr>
                                            <td height="1"><img src="'.$tecPics.'tr.gif" width="1" height="1" border="0" alt=""></td>
                                        </tr>
                                    ');

das klappt auch soweit. Auch die Leerzeichen hab ich ersetzen können.
Nur die Umlaute hab ich noch nicht behandeln können (s.o.).
Unter php.net stand ein Vermerck 'setlocale(LC_CTYPE, 'ar_SA');' um die Schriftcodierung festzulegen....aber da hackt es jetzt bei mir!

Nachtrag: hey Basti, dein post hatte ich eben noch gar nicht auf dem Monitor... Mein Array sieht jetzt so aus:

$menueStruktur = array("Unternehmen" => array("Anfahrtsbeschreibung",
                                                "Ansprechpartner",
                                                "Geschichte", 
                                                "Fachbereiche",
                                                "Qualitätsmanagement",
                                                "Service"),
                             "Produkte" =>     array("Schwingungstechnik",
                                                "Kompensatoren",
                                                "Lärmschutzsysteme",
                                                "Profile und Fender",
                                                "Antriebselemente",
                                                "Spezialdichtungen"),
                            "Vertrieb" =>     array("Niederlassung Berlin",
                                                "Niederlassung Hannover",
                                                "Vertriebspartner",
                                                "Vertretungen"),
                            "Aktuelles" =>     array("Produktneuheiten",
                                                "Messen",
                                                "Presse",
                                                "Internes")
             );

mit deinem Vorschlag werde ich mich jetzt mal beschäftigen...

5

Re: Array & Groß- und kleinschreibung

Nur die Umlaute hab ich noch nicht behandeln können (s.o.).

Guckst Du hier smile
http://de.php.net/htmlentities

Spricht ja nix dagegen, die beiden Funktionen gleichzeitig aufzurufen:

$pfad1 = htmlentities(strtolower($k)); 

HTH, tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

6

Re: Array & Groß- und kleinschreibung

Hi Henrik,

wenn ich richtig liege, dann müssen deine Seiten-ID's mindestens RFC 1738-konform [1]  sein, oder?

Dann gibt es da noch eine ganze Menge Zeichen, die du umwandeln musst, nicht nur Leerzeichen und deutsche Umlaute.

Hier schlage ich dir vor, entweder rawurlencode() [2] zu benutzen, oder ein Array zu definieren (array ('ä'=>'ae','ö'=>'oe')) und dieses als Übersetzungstabelle für strtr() [3] zu definieren, der du die Strings übergibst. 

[1] http://www.faqs.org/rfcs/rfc1738
[2] http://www.php.net/manual/en/function.rawurlencode.php
[3] http://www.php.net/manual/en/function.strtr.php

Basti

Re: Array & Groß- und kleinschreibung

@Tink
gut zu wissen, aber das meinte ich nicht.
ich möchte aus ä einfach nur ae machen und nicht ä

@basti

wenn ich richtig liege, dann müssen deine Seiten-ID's mindestens RFC 1738-konform [1] sein, oder?

öh... ja? smile trotz überfliegen des Textes wei� ich damit nicht so recht was anzufangen...

Dann gibt es da noch eine ganze Menge Zeichen, die du umwandeln musst, nicht nur Leerzeichen und deutsche Umlaute.

Hm...ich wei� aber, das nur diese Zeichen vorkommen werden, ändert das die Sachlage dann nicht?

oder ein Array zu definieren (array ('ä'=>'ae','ö'=>'oe'))

das habe ich versucht, klappt aber nur bedingt:

foreach ($menueStruktur as $k => $v){
                                $pfad1 = strtolower($k);
                                $pfad2 = str_replace(" ","_",$pfad1);
                                $umlaute = array("ä","ö","ü","�");
                                $umlauteErsatz = array("ae","oe","ue","ss");
                                for($x=0;$x<4;$x++){  
                                    $pfad3 = str_replace($umlaute[$x],$umlauteErsatz[$x],$pfad2);
                                }
                                    echo ('
                                        <tr>
                                            <td width="150" height="25" bgcolor="#189CBE"><div class="linkeNavi1"><a onfocus="this.blur();" href="'. $absPath . $pfad3 .'/'. $pfad3 . '.php4">'.$k.'</a></div></td>
                                        </tr>
                                        <tr>
                                            <td height="1"><img src="'.$tecPics.'tr.gif" width="1" height="1" border="0" alt=""></td>
                                        </tr>
                                    ');

die Variable $pfad3 wird zwar angenommen, aber nicht wie gewünscht umgewandelt...wenn ich den echo mit in die for-Schleife mit einbinde schon, nur dann durchläuft er das array ja nochmal zusätzlich und das soll ja auch nicht sein....
was mache ich noch falsch?

Re: Array & Groß- und kleinschreibung

Hi!

ich glaube ich habs jetzt....
da hab ich doch ne neue Variable angelegt $pfad3. Das war voll unnötig...$pfad2 kann man ja einfach überschreiben:

foreach ($menueStruktur as $k => $v){
                                $pfad1 = strtolower($k);
                                $pfad2 = str_replace(" ","_",$pfad1);
                                $umlaute = array("ä","ö","ü","ß");
                                $umlauteErsatz = array("ae","oe","ue","ss");
                                for($x=0;$x<4;$x++){  
                                    $pfad2 = str_replace($umlaute[$x],$umlauteErsatz[$x],$pfad2);
                                }
                                    echo ('
                                        <tr>
                                            <td width="150" height="25" bgcolor="#189CBE"><div class="linkeNavi1"><a onfocus="this.blur();" href="'. $absPath . $pfad2 .'/'. $pfad2 . '.php4">'.$k.'</a></div></td>
                                        </tr>
                                        <tr>
                                            <td height="1"><img src="'.$tecPics.'tr.gif" width="1" height="1" border="0" alt=""></td>
                                        </tr>
                                    ');

nu bin glücklich. Falls ich noch n schrecklichen Fehler gemacht habe würd ich das natürlich gerne wissen. Ansonsten bedanke ich mich bei euch Beiden.

schönen Abend noch!

Re: Array & Groß- und kleinschreibung

Hallo!

Was ist mit anderen Sonderzeichen (é è ê "[Anführungszeichen] ' [Apostroph] etc.)?

Mamphil

The laws of physics are the canvas God laid down on which to paint his masterpiece. “Leonardo Vetra” in Dan Brown’s “Angels & Demons”

10

Re: Array & Groß- und kleinschreibung

Hi Mamphil!

Es geht ja (nur) um eine interne festgelegte Navigation (siehe obiges Array). Die einzelnen Navigationspunkte sind mir bekannt. Das bläht sich zwar noch auf, bleibt aber inhaltlich soweit statisch. Bei Änderungen könnte man noch manuell eingreifen.

tschöö

11

Re: Array & Groß- und kleinschreibung

Hi Henrik,

offensichtlich muss die ID einer Seite ja anderen Kriterien entsprechen, als der Titel, sonst könntest du eine seite ja anhand des Titels identifizieren. Die Frage ist nun eben, welchen Kriterien diese ID entsprechen muss.

Und hier gehe ich halt davon aus, dass es dir darum geht, diese ID als URL-Parameter weitergeben zu können und dann musst du dich eben an den RFC 1738 halten. Da du alles kleingeschrieben haben möchtest, scheint es jedoch noch weitere Anforderungen zu geben.

rawurlencode() verwandelt alle Zeichen, die in nach RFC 1738 in einerm URL nicht erlaubt sind in den entsprechenden Hexwert %20 etc. Wenn die ID nicht menschenlesbar sein muss, dann kannst du die einfach auf diese Art erstellen, es sei denn, z.B. das '%' macht dann wieder woanders Konflikte.

Und das mit der Übersetzungstabelle hast du scheinbar halbwegs überlesen. Ich meinte die Funktion strtr() [1]. Ihr kannst du als zweiten Parameter auch eben ein Array übergeben, so dass die Funktion automatisch alle Zeichen, die im Array als Schlüssel vorkommen durch die zugehörigen Strings ersetzt. Damit fähst du wesentlich besser, als das selbst in einer Schleife zu erledigen. Siehe Manual.

[1] http://www.php.net/manual/en/function.strtr.php

Und, natürlich ändert sich die sachlage, wenn du weißt, dass nur diese und jene Zeichen vorkommen. Natürlich musst du diese Gewissheit aber dann auch programmieren, indem du an der Schnittstelle, an der die Seitentitel eingegeben werden, ausschließt, dass unerlaubte Zeichen reinkommen. Ob das Sinn macht, die Menge der erlaubten Zeichen im Titel zu bregrenzen, bzw. wieweit ist natürlich eine andere Frage. In jedem Fall sollte sie völlig unabhängig davon beantwortet werden, welchen Anforderungen an die ID der seiten gestellt ist. Sprich, ich würde dem Kunden nicht verbieten, seine Seite "S'Internet Café/Zip Zapp Trullala" zu nennen, nur, weil ich zu faul bin, daraus eine taugliche ID zu generieren.

S'Grüßle vom Bast'l

12

Re: Array & Groß- und kleinschreibung

Hi Basti!

Nein, ich möchte ja gar keine URL-Parameter übergeben. Auch den Titel generiere ich auf andere Weise.
Ist es in Bezug auf Suchmaschinen nicht sogar sinnig, den Titel html-manuell einzutragen?

Ich möchte doch einfach nur die Links dynamisch generieren:

<a onfocus="this.blur();" href="'. $absPath . $pfad2 .'/'. $pfad2 . '.php4">'.$k.'</a>

die Ordner und Dateinamen enthalten garantiert keine Sonderzeichen.
Den Titel kann der Kunde frei wählen und hat keinen Einfluss auf die Navigation.

Den Link über strtr() werde ich mir aber mal zu gemüte führen...

schönen Dank & viele Grüße

13

Re: Array & Groß- und kleinschreibung

Hi Kaplar,

ich glaub, wir reden ein bischen aneinander vorbei oder zumindest schein ich nicht wirklich ausdrücken zu können, was ich meine.

1. Ich meine mit "Titel" den Namen unter dem der Benutzer eine Seite anspricht ("Startseite", "Über uns" oder so). Was du mit "html-manuell" meinst, weiß ich nicht.

2. Da ja nun der Benutzer zwar die Seite "Über uns" in der Navigation anklicken kann, jedoch bestimmte Konventionen, wie z.B. das Übertragungsprotokoll, Dateisystem, RDBMS oder was auch immer offensichtlich mit bestimmten Sonderzeichen, wie Leerzeichen und Umlauten nichts anfangen können, möchtest du nun, so hatte ich das zumindest verstanden aus diesem Titel eine ID generieren, die den syntaktischen Anforderungen entspricht.

Wenn ich hiermit also richtig liege, dann ist alles, was ich sagen wollte: Lege die syntaktischen Regeln für deine Titel fest, dann lege die der ID's fest und zuletzt schreibst du eine Funktion, die aus dem Titel eine ID erzeugt. Natürlich kannst du die Seiten auch einach durchnummerireren oder so, aber ich glaube, das war nicht in deinem Sinn, oder?

Und für eine solche Funktion hab ich eben ein paar Vorschläge gemacht, wobei mir eben immernoch unklar ist, aus welchem Zeichensatz die Titel bestehen und wie die ID nachher aussehen muss (das strtolower() hat mich eben verwundert, da mir kein Grund einfällt, warum eine solche ID, ob sie nun später als Ordner-, als Dateiname, als MySQL-Entität oder als was auch immer vorkommt, eben nur kleine Buchstaben enthalten darf). Wie auch immer, ich glaube mit strtr() oder den anderen Vorschlägen wirst du eine passende Lösung finden.

Basti

PS:
Falls du den Seitenbaum in einer MySQL-Tabelle ablegst, könnte für dich das Thema "Nested Sets" [1] einen Blick wert sein.

[1] http://www.develnet.org/36.html

14

Re: Array & Groß- und kleinschreibung

Hi Basti!

ich glaub, wir reden ein bischen aneinander vorbei 

wink ich glaub auch..

zu 1)
Für mich ist der Titel einer Seite das was <title>hier</title> steht und mit html-Manuell meine ich, das ich den Titel nicht dynamisch generiere (zB über das angelegte Array), sondern in jedem Dokument per Hand eintrage.

zu 2)
Wenn du mit ID die Pfadzuweisung meinst (sagt man das so?), dann hast du natürlich recht.

Lege die syntaktischen Regeln für deine Titel fest, dann lege die der ID's fest und zuletzt schreibst du eine Funktion, die aus dem Titel eine ID erzeugt.

so hab ich das ja dann eigentlich schon getan!?
Ich hab überlegt: was kommt in den 'Titeln' der Seite vor, was ich wieder rauschmeissen oder verändern muss, damit ich eine korrekte Pfadzuweisung realisieren kann...

Durchnumerieren tu ich die Seiten nicht direkt, aber ich lege Kennzahlen fest, um die Navigation zu steuern.

Mit Zeichensatz meinst du jetzt hoffentlich dies:
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
Hab ich noch gar nicht eingetragen, aber ich werde oben genannten benutzen....

da mir kein Grund einfällt, warum eine solche ID, ob sie nun später als Ordner-, als Dateiname, als MySQL-Entität oder als was auch immer vorkommt, eben nur kleine Buchstaben enthalten darf

der einzige Grund ist dann wohl, das ich das einfach immer so mache  big_smile
(ausser bei java-programmierung, wo ich vom Kenntnisstand aber noch richtig in den Kinderschuhen stecke)

strtr() <- schau ich mir noch an, obwohl ich jetzt ersteinmal andere Prioitäten setze.

Falls du den Seitenbaum in einer MySQL-Tabelle ablegst, könnte für dich das Thema "Nested Sets" [1] einen Blick wert sein.

hatte ich eigentlich nicht vor (MySQL hab ich auch noch nicht so den Plan von)...aber schaun wir mal....

so...puh! Ich brauch immer ein bißchen Zeit um so lange zu Texten...

hier kannst du dir das Projekt mal anschauen:
http://217.114.64.146/willbrandt/index.php4

Bitte sei mit meinem tlw. Unverständnis(oder:nichtverstehen?) etwas nachsichtig...ich gebe mir große Mühe das (große) Projekt überhaupt ALLEINE zu bewältigen, da kann ich nicht immer viel Zeit aufwenden um neue Sachen umzusetzen....

schau doch mal unter dem Link nach...was sagste dazu?

schöne Grüße

Nachtrag: mit ID meinst du eine Bezeichnung einer bestimmten Seite in Form eines Strings, der auf vielerlei Art Verwendung finden kann?

15

Re: Array & Groß- und kleinschreibung

Hi Kaplar,

> Ich hab überlegt: was kommt in den 'Titeln' der Seite vor, was ich wieder
> rauschmeissen oder verändern muss, damit ich eine korrekte
> Pfadzuweisung realisieren kann...

Jo, genau das meinte ich. Falls nun dein Kunde diesen 'Titel' einer neuen Seite völlig frei definieren kann, dann muss deine Funktion eben auch alle möglichen Zeichen, falls diese außerhalb des Zeichensatzes der ID liegt korrekt umwandeln können.

Mit Zeichensatz meine ich im Übrigen die Menge der möglichen Zeichen, aus denen eine Zeichenkette besteht. Hier gibt es natürlich standardisierte Zeichensätze, wie der zitierte ISO 8859-1 (wobei 8859-15 vielleicht besser taugt, da er z.B. auch das Euro-Zeichen enthält [1]). Siehe auch [2] oder [3].

[1] http://wikipedia.org/wiki/ISO_8859-15
[2] http://wikipedia.org/wiki/Character_code
[3] http://selfhtml.teamone.de/inter/zeichensaetze.htm

> Bitte sei mit meinem tlw. Unverständnis(oder:nichtverstehen?) etwas
> nachsichtig...ich gebe mir große Mühe das (große) Projekt überhaupt
> ALLEINE zu bewältigen, da kann ich nicht immer viel Zeit aufwenden um
> neue Sachen umzusetzen....

Ach, Nachsicht ist hier garnicht angesagt. Du machst dein Ding und ich hab dich einfach ein bischen zugetextet. Wenn man mit Zeichensätzen noch nie Probleme bekommen hat, dann verschwendet man in der Regel auch keinen Gedanken daran. Wenn aber irgendwann mal deine Webseite nicht mehr "funktioniert", weil jemand eben ein völlig unerwartetes Zeichen in eine Formular eingetragen hat und dieses Zeichen eben von bestimmten Teilen des Systems abgewiesen wird, spätestens dann ist es an der Zeit, sich das Thema mal genauer anzuschauen.

> schau doch mal unter dem Link nach...was sagste dazu?

Ist ja nicht das Siteseeing-Forum hier, daher nur ein Hinweis, passend zum Thema und ein Punkt, der mir spontan aufgefallen ist:

1. Anstatt kontakt/kontakt.php4 kannst du auch einfach nur kontakt/ benutzen und die Seite dann als index.php4 in das Verzeichnis kontakt/ legen. Deinem Server musst du dann nurnoch beibringen, diese index.php4 automatisch zu starten (Apache: DirectoryIndex index.php4). Das sieht doch netter aus, oder? Parameter kannst du dann auch einfach übergeben: kontakt/?key=value.

Überdies kannst du dann auch leicht einen Cache einbauen, indem du die gecachte Seite einfach als index.html in den entsprechenden Ordner legst und den Server anweist, zuerst nach der index.html zu suchen und dann nach der index.php4 (Hier ist übrigends meistens DirectiryIndex index.html index.php voreingestellt (...glaub ich)). Bei einem Verfall der seite löscht du die index.html wieder und die index.php4 wird wieder geladen.

2. Der Menüpunkt "Mail" ist ein Mailto-Link. Das finde ich sehr unschön. Nicht nur, weil dieser nur "funktioniert", wenn auch ein Mail-Client installiert ist, sondern auch, weil er voll auf dem Rahmen fällt und der Benutzer trotz dem recht eindeutigen Label wohl eher ein Kontaktformular oder eine Liste mit E-Mail-Adressen erwartet, als den Stert seines Mail-Clients.

> Nachtrag: mit ID meinst du eine Bezeichnung einer bestimmten Seite in
> Form eines Strings, der auf vielerlei Art Verwendung finden kann?

Ich meine irgend einen Identifikator, sei es ein String oder eine Ganzzahl oder was auch immer, mit dem die Seite in allen Teilen des Systems und den Schnittstellen eindeutig identifizierbar ist. Werden die Daten z.B. in einem Dateisystem gespeichert, das nicht zwischen Klein- und Großbuchstaben unterscheidet, dann sollte man den Zeichensatz auf kleine ODER große Buchstaben (zzgl. der erlaubten Sonderzeichen) beschränken. usw.

Basti

16

Re: Array & Groß- und kleinschreibung

alles klar!

thx

schöne Grüße