Juergen: aus Ö wird �

in meinem Dokumet steht

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

in meinem $string ='Österreich';

$array_1 = array('oe','ae','ue','oe','ae','ue','ss');	
$array_2 = array('ö','ä','ü','Ö','Ä','Ü','ß');

for ($x = 0; $x < 7; $x++)
	{
	$string		= str_replace($array_1[$x], $array_2[$x], $string);
	}
$string =strtolower($string);	
$string=preg_replace ( '/[^a-zäÄöÖüÜß0-9_-]/i',  '',$string);	

anschliessend ist

�sterreich

drin.

Bis vor eienr Stunde hat es funktioniert, ud ich habe nichts geändert.

  1. Hello,

    <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    Und mit welcher Kodierung wurde das Dokument angespeichert? Ich vetmute, in einer Singlebyte-Kodierung.

    in meinem $string ='Österreich';

    Sieh dir bitte das Handbuch zu str_replace() an. Du benötigst keine Schleife. Und Du solltest SEARCH und REPLACE nicht vertauschen

    $array_1 = array('oe','ae','ue','oe','ae','ue','ss'); $array_2 = array('ö','ä','ü','Ö','Ä','Ü','ß');

    for ($x = 0; $x < 7; $x++) { $string = str_replace($array_1[$x], $array_2[$x], $string); } $string =strtolower($string); $string=preg_replace ( '/[^a-zäÄöÖüÜß0-9_-]/i', '',$string);

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es
    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
    1. Tach!

      Sieh dir bitte das Handbuch zu str_replace() an. Du benötigst keine Schleife. Und Du solltest SEARCH und REPLACE nicht vertauschen

      Noch besser ist strtr() in seiner zweiten Variante.

      $array_1 = array('oe','ae','ue','oe','ae','ue','ss');	
      $array_2 = array('ö','ä','ü','Ö','Ä','Ü','ß');
      

      Da muss man dann nicht zwei Arrays pflegen und die Werte über die Position koordinieren, sondern kann ein Array mit Zuordnung über Key-Value haben.

      $string =strtolower($string);	
      

      Wenn man mit Mehr-Byte-Kodierungen arbeitet, sollte man Ein-Byte-Funktionen nur dann einsetzen, wenn die Zeichen nicht als solche erkennt werden müssen. Um den Kleinbuchstaben erhalten zu können, muss das Zeichen erkannt werden. strtolower() arbeitet aber mit Ein-Byte-Zeichen, kann also den korrekten Buchstaben nicht finden. MB-Funktionen müssen hierfür verwendet werden (inklusive korrekter Initialisierung, welche Kodierung man zu verwenden gedenkt).

      dedlfix.

  2. Lieber Juergen,

    1. Dein HTML-Code, der im Browser ankommt, muss tatsächlich UTF-8 kodiert sein (klar, sonst im Widerspruch zur meta-Angabe).
    2. Der Server muss im HTTP-Header "Content-Type" auch die korrekte (also "UTF-8") Enkodierung angeben (tut er das nicht, hat seine abweichende Angabe Vorrang und steht dann im Widerspruch zur Kodierung des HTML-Dokuments).
    3. Das PHP-Script (also alle Scripte!) sollte ebenfalls rein in UTF-8 kodiert sein, damit seine Ausgabe auch UTF-8 ist.

    Kannst Du bestätigen, dass alle drei Punkte zutreffen?

    Liebe Grüße,

    Felix Riesterer.

  3. Hallo,

       str_replace($array_1[$x], $array_2[$x], $string);
    

    Seh ich das richtig, dass du aus einem Duett ein Dütt, und aus Itzehoe Itzehö machen willst? Warum?

    Gruß
    Kalk

    1. Hello,

      was schätzt Du, wieviele Ausnahmen (so wie "Duett") es in der deutschen Sprache und ihren gängigen Lehnworten es gibt? Ob das mehr als 100 sind?
      Ich hab schon mal gesucht, ob es schon irgentwo eine Liste gibt...

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es
      Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
      1. Hallo Tom,

        was schätzt Du, wieviele Ausnahmen (so wie "Duett") es in der deutschen Sprache und ihren gängigen Lehnworten es gibt? Ob das mehr als 100 sind?

        Ich denke mal, Kalk wollte den TO darauf hinweisen, dass er sich mit der Reihenfolge der Parameter vertan hat (das wolltest du doch auch, oder verstehe ich dich falsch?).

        Ich hab schon mal gesucht, ob es schon irgentwo eine Liste gibt...

        Selbst wenn, dann hat man immer noch das Problem, dass sie nicht vollständig sein könnte. Die ASCIIsierung eines deutschen Textes ist möglich, aber die Rückumwandlung nicht.

        Gruß
        Julius

        1. Hello,

          was schätzt Du, wieviele Ausnahmen (so wie "Duett") es in der deutschen Sprache und ihren gängigen Lehnworten es gibt? Ob das mehr als 100 sind?

          Ich denke mal, Kalk wollte den TO darauf hinweisen, dass er sich mit der Reihenfolge der Parameter vertan hat (das wolltest du doch auch, oder verstehe ich dich falsch?).

          Das wissen wir gar nicht, was Jürgen wirklich wollte. Kalk hat durchaus eine weitere Möglichkeit aufgedeckt. Und das brachte mich dann auf die Frage mit der Liste für Ausnahmen. Ich korrigiere den halben Tag lang Daten in DB-Tabellen. Da sind solche Spezialfälle-Tabellen oft extrem hilfreich.

          Ich hab schon mal gesucht, ob es schon irgentwo eine Liste gibt...

          Selbst wenn, dann hat man immer noch das Problem, dass sie nicht vollständig sein könnte. Die ASCIIsierung eines deutschen Textes ist möglich, aber die Rückumwandlung nicht.

          Man kann dann die Datenkorrekturen oft auf reine Sichtkontrollen reduzieren und muss sehr viel seltener noch Hand anlegen.

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es
          Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
          1. Hallo Tom,

            Selbst wenn, dann hat man immer noch das Problem, dass sie nicht vollständig sein könnte. Die ASCIIsierung eines deutschen Textes ist möglich, aber die Rückumwandlung nicht.

            Man kann dann die Datenkorrekturen oft auf reine Sichtkontrollen reduzieren und muss sehr viel seltener noch Hand anlegen.

            Wenn man dann praktisch jede Änderung einzeln abnimmt und bei der Anwendung auf Texte, ja.

            Gruß
            Julius

        2. @@Julius

          was schätzt Du, wieviele Ausnahmen (so wie "Duett") es in der deutschen Sprache und ihren gängigen Lehnworten es gibt? Ob das mehr als 100 sind?

          Ich schätze lieber mal die Relevanz dieser Schätzung: niedrig.

          Ich denke mal, Kalk wollte den TO darauf hinweisen, dass er sich mit der Reihenfolge der Parameter vertan hat

          Umlaute in au, oe, um umzuwandeln dürfte auch kaum sinnvoller sein als die andere Richtung.

          LLAP 🖖

          --
          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      2. Hi,

        was schätzt Du, wieviele Ausnahmen (so wie "Duett") es in der deutschen Sprache und ihren gängigen Lehnworten es gibt? Ob das mehr als 100 sind?

        euer teuer Steuer Feuer Bauer Sauer Mauer Hauer Schauer Waechter blauer lauer freuen stauen verstauen versauern verteuern abfeuern verfeuern mauern kauern kauen mauert hauen versauert verteuert abgefeuert gehauen abgehauen Apnoe verhauen schlauer steuern Steuerpolitik Steuererhöhung Mauervorsprung …

        so mal ganz spontan schon über 30 Stück. Da dürften es deutlich mehr als 100 werden … Insbesondere wenn man Zusammensetzungen berücksichtigt wie Feuerholz, Feuerwehr, Mauervorsprung, Mauerspecht usw.

        cu,
        Andreas a/k/a MudGuard

        1. Hello,

          danke für's Mitdenken.

          Da steckt aber vielleicht eine Regelmäßigkeit dahinter, wie man diese Fälle von "Duett" & Co abgrenzen kann. Aber ich vermutd, dass eine Konvertierungsfunktion nicht ganz einfach werden würde.

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es
          Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
          1. Hi,

            Da steckt aber vielleicht eine Regelmäßigkeit dahinter, wie man diese Fälle von "Duett" & Co abgrenzen kann. Aber ich vermutd, dass eine Konvertierungsfunktion nicht ganz einfach werden würde.

            Spätestens bei Eigennamen, die mit Umlaut auch als gewöhnliches Wort existieren, wird's scheitern. Der Waechter war nicht zufällig in der Liste. Eine frühere Nachbarin von mir hieß Mueller. Gleiches Problem.

            cu,
            Andreas a/k/a MudGuard

            1. Lieber MudGuard,

              Spätestens bei Eigennamen, die mit Umlaut auch als gewöhnliches Wort existieren, wird's scheitern. Der Waechter war nicht zufällig in der Liste. Eine frühere Nachbarin von mir hieß Mueller. Gleiches Problem.

              Goethe also nicht?

              Liebe Grüße,

              Felix Riesterer.

              1. Hallo

                Spätestens bei Eigennamen, die mit Umlaut auch als gewöhnliches Wort existieren, wird's scheitern. … Waechter … Mueller. Gleiches Problem.

                Goethe also nicht?

                Hach, heute Morgen erst habe ich den LKW einer Firma namens „Göthe“ gesehen und habe ein paar Sekunden gebraucht, bis mir klar was, was daran nicht mit meiner Erwartung übereinstimmte. 😀

                Tschö, Auge

                --
                Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
                Toller Dampf voraus von Terry Pratchett
              2. Hi,

                Spätestens bei Eigennamen, die mit Umlaut auch als gewöhnliches Wort existieren, wird's scheitern. Der Waechter war nicht zufällig in der Liste. Eine frühere Nachbarin von mir hieß Mueller. Gleiches Problem.

                Goethe also nicht?

                ne, Goethe hieß die Nachbarin nicht 😉

                cu,
                Andreas a/k/a MudGuard

          2. Hallo Tom,

            Da steckt aber vielleicht eine Regelmäßigkeit dahinter, wie man diese Fälle von "Duett" & Co abgrenzen kann.

            Mir würde spontan „Dütt un Datt“ einfallen, obwohl das Platt[1] ist. Kann aber durchaus in überwiegend deutschen Texten vorkommen.

            Wenn Maschinen an menschlicher Sprache herumfuhrwerken geht das mit schöner Regelmäßigkeit schief:
            Google: dortmund essen gehen; zeigt Weg von Dortmund nach Essen

            Gruß
            Julius



            1. An die Kleinschreibungsbefürworter: Hier zeigt sich, warum man Nomen groß schreibt! ↩︎

            1. Hallo,

              Aber "essengehen" wird als Verb kleingeschrieben. Geholfen hätte eventüll die korrekte Zusammenschreibung.

              Gruß
              Kalk

              1. Hallo Tabellenkalk,

                Aber "essengehen" wird als Verb kleingeschrieben.

                Das berücksichtigt Google aber anscheinend nicht (ich hatte es gestern ausprobiert). Wahrscheinlich, weil die Nutzer es gewohnt sind, das einfach nur ins Formular zu schmieren und dabei nicht die Umschalt-Taste benutzen.

                Geholfen hätte eventüll die korrekte Zusammenschreibung.

                Beim Duden ist als Beispiel „[griechisch] essen gehen“ drin. (BTW: Deine Veranschaulichung der Unsinnigkeit des Ersetzens hat erst die Rechtschreibprüfung meines Browsers aufgedeckt 😂)

                Gruß
                Julius

                1. Tach!

                  Geholfen hätte eventüll die korrekte Zusammenschreibung.

                  Beim Duden ist als Beispiel „[griechisch] essen gehen“ drin.

                  Und eine dortige Suche nach essengehen als zusammengeschriebenes Wort findet keine Ergebnisse. Auch korrekturen.de sieht das anders, sowie diverse andere Fundstellen.

                  dedlfix.

                  1. Hallo dedlfix,

                    Und eine dortige Suche nach essengehen als zusammengeschriebenes Wort findet keine Ergebnisse. Auch korrekturen.de sieht das anders, sowie diverse andere Fundstellen.

                    Das ist auch korrekt. Verbindungen aus zwei Verben werden getrennt geschrieben. (Seite 14)

                    Bis demnächst
                    Matthias

                    --
                    Rosen sind rot.
                    1. Hallo,

                      Das ist auch korrekt. Verbindungen aus zwei Verben werden getrennt geschrieben. (Seite 14)

                      Ok, ich hatte hier eine übertragene Bedeutung wahrgenommen, die für mich „essengehen“ plausibel erscheinen ließ. Dann muss ich heute wohl selberkochen. 😉

                      Gruß
                      Kalk

      3. Von den Gegenbeispielen weiter unten ganz abgesehen, wenn irgendwo ue steht hat das jemand wohl so eingegeben. Warum sollte man daraus ein ü machen in der Annahme das wäre so richtiger? Wenn ein Mensch etwas falsch eingibt, macht sich eine Maschine bzw. deren Programmierer höchstens lächerlich wenn sie es korrigieren will. Und sie verfälscht Daten, das kommt noch hinzu.

        1. Hello,

          ich kenne aber Textprogramme mit durchaus guter Rechtschreibkorrektur.

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es
          Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
          1. Natürlich gibts das, wenn beispielsweise gewohnte Vertipper korrigiert werden. Das basiert aber nicht nur auf einzelnen Buchstaben. Selbst da finde ich es grenzwertig etwas einfach so auszutauschen, auch wenn es hilfreich ist.

  4. Hallo Juergen,

    in meinem Dokumet steht

    <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    Wenn du (sinnvollerweise) den HTML5-Doctypes <!doctype html> benutzt, könntest du auch <meta charset="utf-8"> benutzen, das ist äquivalent und kürzer.

    in meinem $string ='Österreich';

    $array_1 = array('oe','ae','ue','oe','ae','ue','ss'); $array_2 = array('ö','ä','ü','Ö','Ä','Ü','ß');

    for ($x = 0; $x < 7; $x++) { $string = str_replace($array_1[$x], $array_2[$x], $string); } $string =strtolower($string); $string=preg_replace ( '/[^a-zäÄöÖüÜß0-9_-]/i', '',$string);

    strtolower() funktioniert nur für ASCII-Zeichen. Unabhängig von deinem Kodierungsproblem empfiehlt sich die Verwendung von mb_strtolower(), Beispiel:

    echo mb_strtolower('ÖsteRReicH'); // österreich
    echo strtolower('ÖsteRReicH'); // Österreich
    

    �sterreich

    Das deutet stark darauf hin, dass dein Script mit einer Kodierung gespeichert wurde, die nur ein Byte zur Kodierung benutzt (wie TS schon schrieb), wie beispielsweise ISO-8859-1 oder -15 abgespeichert wurde, weil dann Bytesequenzen auftauchen können (das Ö), die in UTF-8 keine Gültigkeit besitzen, daher das Ersetzungszeichen �. Anders herum würdest du Ö erhalten (das Ö wird in UTF-8 mit zwei Bytes kodiert, die in einer Ein-Byte-Kodierung wie ISO-8859-1 anders interpretiert werden als in UTF-8).

    Gruß
    Julius