PHP-Funktion substr() Fehler

Lesezeit: 1 Minute

Benutzer-Avatar
Stoikidis

Wenn ich benutze substr() Ich bekomme am Ende einen seltsamen Charakter

$articleText = substr($articleText,0,500);

Ich habe eine Ausgabe von 500 Zeichen und � <--

Wie kann ich das beheben? Ist es ein Codierungsproblem? Meine Sprache ist Griechisch.

  • Habe dasselbe in (britischem) Englisch gesehen.

    – Alimack

    25. August 2014 um 11:03 Uhr

substr zählt mit Bytes und nicht mit Zeichen.

Griechisch bedeutet wahrscheinlich, dass Sie eine Multibyte-Codierung wie UTF-8 verwenden – und das Zählen pro Byte ist für diese nicht ganz gut.

Vielleicht mit mb_substr könnte helfen, hier : die mb_* Funktionen wurden speziell für Multi-Byte-Kodierungen erstellt.

  • Ich lerne jeden Tag mehr und mehr… Danke Stackoverflow!

    – Boris Delormas

    19. Dezember 2011 um 10:07 Uhr

  • Vielen Dank. Aber für mich ist die Hauptsache hinzuzufügen mb_internal_encoding("UTF-8"); vor Gebrauch mb_* Funktionen. Ohne es hinzuzufügen, sehe ich immer noch Quadrate.

    – ivkremer

    27. Dezember 2013 um 15:46 Uhr

  • @Kremchik Sie werden keine Quadrate sehen, wenn Sie verwenden mb_substr($short, 0, 75, 'utf-8'). Dann brauchen Sie nicht zu verwenden mb_internal_encoding Vor mb_substr.

    – trejder

    23. Juni 2014 um 12:39 Uhr

Benutzer-Avatar
Uğur Özpinar

Verwenden mb_substr Stattdessen ist es in der Lage, mit mehreren Codierungen umzugehen, nicht nur mit Einzelbyte-Zeichenfolgen substr:

$articleText = mb_substr($articleText,0,500,'UTF-8');

  • “UTF-8”-Teil war wichtig für mich – vergiss nicht, dass es piepst!

    Benutzer993683

    10. Juli 2013 um 19:47 Uhr

  • “UTF-8” als optionaler Parameter hat bei mir funktioniert. Denken Sie daran, dass Sie möglicherweise auch mb_strlen() verwenden möchten, wenn Sie die Zeichenfolgenlänge verwenden, um festzustellen, ob sie geschnitten werden muss.

    – Kent Munthe Caspersen

    15. Juli 2013 um 11:20 Uhr

  • Eine Alternative ist die Verwendung mb_internal_encoding('utf-8') vor irgendwelchen mb_* Befehl.

    – trejder

    23. Juni 2014 um 12:40 Uhr

Sieht aus, als würden Sie dort ein Unicode-Zeichen in zwei Hälften schneiden. Verwenden mb_substr stattdessen für Unicode-sicheres String-Slicing.

  • …mit Anruf mb_internal_encoding('utf-8') vor oder mit der Verwendung 'utf-8' als vierte Parameter von mb_substr. Doc sagt, dass es optional ist und wenn es weggelassen wird, wird der interne Zeichencodierungswert verwendet, aber der Gedanke ist (an anderer Stelle im PHP-Dokument erklärt), dass die „interne Codierung“ von PHP fast immer „etwas anderes“ als Ihre ist Seitencodierung. Also zum Schneiden von UTF8-Strings dieser vierte Parameter oder Aufruf mb_internal_encoding('utf-8') erforderlich wird.

    – trejder

    23. Juni 2014 um 12:42 Uhr


Benutzer-Avatar
Mussawi7

Verwenden Sie diese Funktion, es hat für mich funktioniert

function substr_unicode($str, $s, $l = null) {
    return join("", array_slice(
        preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
}

Kredite: http://php.net/manual/en/function.mb-substr.php#107698

ms_substr() funktioniert auch hervorragend, um seltsame Zeilenumbrüche zu entfernen, mit denen ich nach dem Parsen von HTML-Code Probleme hatte. Das Problem wurde NICHT gelöst von:

 trim() 

oder:

 var_dump(preg_match('/^\n|\n$/', $variable));

oder:

str_replace (array('\r\n', '\n', '\r'), ' ', $text)

Nicht fangen.

Benutzer-Avatar
Kristoffer Böhmen

Alternative Lösung für UTF-8-codierte Zeichenfolgen – diese konvertiert UTF-8 in Zeichen, bevor die Teilzeichenfolge abgeschnitten wird.

$articleText = substr(utf8_decode($articleText),0,500);

Um den Artikeltext-String wieder in UTF-8 zu bringen, ist eine zusätzliche Operation erforderlich:

$articleText = utf8_encode( substr(utf8_decode($articleText),0,500) );

Benutzer-Avatar
GowriShankar

Sie versuchen, Unicode-Zeichen zu schneiden. Also habe ich es vorgezogen substr() Versuchen mb_substr() in php.

substr()

substr ( string $string , int $start [, int $length ] )

mb_substr()

mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

Weitere Informationen zu substr() – Credits => Hier prüfen

1018510cookie-checkPHP-Funktion substr() Fehler

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

Privacy policy