Die Verwendung von substr() von PHP mit Sonderzeichen am Ende führt zu Fragezeichen

Lesezeit: 2 Minuten

Benutzer-Avatar
Bert

Wenn ich die Funktion substr() in PHP verwende, bekomme ich ein Fragezeichen (ein Quadrat mit einem Fragezeichen – je nach Browser) am Ende des Strings, wenn dieses letzte Zeichen ein Sonderzeichen war, wie ë oder ö usw …

$introtext = html_entity_decode($item->description, ENT_QUOTES, "UTF-8");
$introtext = substr($introtext, 0, 200);

Wie kann ich dem entkommen?

  • keine Joomla-Frage, reines PHP kann dies lösen (Sruit A.Suks Antwort funktioniert am besten)

    – Fanky

    28. Januar 2019 um 13:57 Uhr

  • Beantwortet das deine Frage? PHP-Funktion substr() Fehler

    – gre_gor

    6. April um 11:06 Uhr

Wenn Ihre Zeichenfolge eine Multibyte-Codierung (wie UTF-8) hat, sollten Sie verwenden mb_substr um solche probleme zu vermeiden:

$introtext=mb_substr($introtext,0,200);

  • Groß! Funktioniert wie erwartet 🙂

    – Kann Rau

    21. Juli 2015 um 19:16 Uhr

  • Dies funktioniert nicht mit skandinavischen Buchstaben wie åäö, die benötigt werden, um utf-8 hinzuzufügen, wie es Sruit A.Suk vorgeschlagen hat

    – EspeH

    20. August 2015 um 18:38 Uhr

  • Danke, das hat mir den Tag gerettet!

    – Michi-2142

    2. Dezember 2016 um 6:40 Uhr

  • Ahh das hat mir sehr geholfen. Sonderzeichen verursachten Probleme, also fand ich nach viel Debugging heraus, dass die Ursache $myString war[$i] was auch mit substr das gleiche ungültige Ergebnis lieferte. Allerdings hat mb_substr das Problem nun vollständig behoben.

    – Sean McManus

    20. Februar 2019 um 14:31 Uhr

  • @SeanMcManus Ja, das wirst du finden im Handbuch.

    – einsamer Tag

    20. Februar 2019 um 20:40 Uhr

Benutzer-Avatar
Sruit A.Suk

Falls jemand die vorherigen Antworten ausprobiert hat und es immer noch nicht funktioniert hat:

Versuchen Sie, einen Unicode-Namen hinzuzufügen mb_substr wie:

$introtext = mb_substr($introtext, 0, 200, 'utf-8');

  • Akzeptierte Antwort hat bei mir nicht funktioniert, ich musste es auf Ihre Weise machen, damit es mit skandinavischen Zeichen funktioniert. Vielen Dank

    – EspeH

    20. August 2015 um 18:37 Uhr

Verwenden mb_substr

  • Wie unterscheidet sich das von allen vorherigen Antworten?

    – Peter Mortensen

    6. Juli 2019 um 20:26 Uhr

Das liegt daran, dass substr nicht mit Multibyte-Zeichen funktioniert. substr wird wahrscheinlich ein Multibyte-Zeichen “halbieren”. Sie sollten stattdessen verwenden mb_substr. Stellen Sie außerdem sicher, dass Ihre Datei in UTF-8 gespeichert ist.

$introtext = mb_substr($introtext, 0, 200);

verwenden mb_substr Anstatt von substr das löst solche Probleme, aber vorher überprüfen mb_string wird in Ihrer PHP-Konfiguration aktiviert durch:

php -i | grep mbstring

Es würde Ihnen zeigen, dass die mb_string aktiviert ist oder nicht. Wenn nicht, können Sie das installieren durch: (für PHP 8.0)

sudo apt-get install php8.0-mbstring

Jetzt können Sie verwenden mb_substr so was:

mb_substr(string $string, int $start, int $length, string $kodierung): string

$introtext = mb_substr($introtext, 0, 200, 'UTF-8');

1048510cookie-checkDie Verwendung von substr() von PHP mit Sonderzeichen am Ende führt zu Fragezeichen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy