Messen Sie die Stringgröße in Bytes in PHP

Lesezeit: 4 Minuten

Messen Sie die Stringgrose in Bytes in PHP
Liam Bailey

Ich mache einen Immobilien-Feed für ein Portal und es sagt mir, dass die maximale Länge einer Zeichenfolge 20.000 Bytes (20 KB) betragen sollte, aber ich bin noch nie darauf gestoßen.

Wie kann ich messen byte Größe von a varchar string. Also kann ich dann eine While-Schleife machen, um es zu trimmen.

  • Es sollte kein Problem geben, eine Zeichenfolge auf diese Länge zu bringen. Was sagt es Ihnen? welche fehler siehst du ????

    – großekm

    27. September 11 um 12:30 Uhr

  • Bytegröße -> strlen() Ex: strlen('a₹') -> 4. Zeichenanzahl -> mb_strlen() Ex: mb_strlen('a₹', "UTF-8") -> 2. Notiz: mb_strlen() ist in php standardmäßig deaktiviert.

    – Satvik

    24. Juni 21 um 20:58 Uhr

Messen Sie die Stringgrose in Bytes in PHP
PhoneixS

Sie können mb_strlen() verwenden, um die zu erhalten Byte-Länge Verwenden einer Codierung, die nur Byte-Zeichen enthält, ohne sich Gedanken über Multibyte- oder Singlebyte-Zeichenfolgen zu machen. Wie beispielsweise drake127 in einem Kommentar von mb_strlen sagte, können Sie die 8-Bit-Codierung verwenden:

<?php
    $string = 'Cién cañones por banda';
    echo mb_strlen($string, '8bit');
?>

Sie können Probleme mit der strlen-Funktion haben, da PHP eine Option zum Überladen von strlen hat, um tatsächlich mb_strlen aufzurufen. Weitere Informationen dazu finden Sie unter http://php.net/manual/en/mbstring.overload.php

Zum Trimmen der Zeichenfolge nach Bytelänge ohne Aufteilung in der Mitte eines Multibyte-Zeichens können Sie Folgendes verwenden:

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

  • Dies funktioniert tatsächlich weitaus besser als die nicht hilfreiche akzeptierte Antwort.

    – Unglaublicher Hut

    17. Februar 20 um 18:56 Uhr

Sie müssen herausfinden, ob die Zeichenfolge ASCII-codiert oder mit einem Multibyte-Format codiert ist.

Im ersteren Fall können Sie einfach verwenden strlen.

Im letzteren Fall müssen Sie die Anzahl der Bytes pro Zeichen ermitteln.

Die strlen-Dokumentation gibt ein Beispiel dafür, wie es geht: http://www.php.net/manual/en/function.strlen.php#72274

  • strlen ist keine mb-sichere Funktion und gibt tatsächlich die Anzahl der Bytes zurück, nicht der Zeichen. Wenn Sie eine Anzahl von Zeichen in Multibyte-Codierung wünschen, müssen Sie mb_strlen verwenden.

    – Maxim Krizhanovsky

    27. September 11 um 12:43 Uhr

  • @Darhazer es ist möglich zu überladen str*() hinein mb_str*(), also berufen strlen werde tatsächlich anrufen mb_strlen. Überprüfen Sie, ob dies aktiviert ist mbstring.func_overload in php.ini. Siehe auch php.net/manual/en/mbstring.overload.php

    – Carlos Campderros

    27. September 11 um 13:06 Uhr

  • Wenn Sie nach der Anzahl von suchen Byte (wonach du gefragt hast – nicht die Anzahl der Zeichen) wurde die richtige Antwort von @PhoneixS unten gepostet; wie von @Carlos hervorgehoben strlen() ist nicht sicher, da es bei manchen PHP-Installationen überlastet sein kann.

    – mindplay.dk

    27. Juni 14 um 11:24 Uhr

Messen Sie die Stringgrose in Bytes in PHP
Seelenverschmelzung

Meinst du Bytegröße oder Stringlänge?

Die Bytegröße wird mit gemessen strlen(), während die Zeichenfolgenlänge mit abgefragt wird mb_strlen(). Sie können verwenden substr() eine Saite auf X trimmen Byte (Beachten Sie, dass dies die Zeichenfolge unterbricht, wenn sie eine Multibyte-Codierung hat – wie Darhazer in den Kommentaren darauf hingewiesen hat) und mb_substr() um es in der Codierung der Zeichenfolge auf X Zeichen zu kürzen.

  • strlen gibt Ihnen keine Bytegröße.

    – Achtung

    27. September 11 um 12:31 Uhr

  • @NBit gibt Ihnen genau die Anzahl der Bytes … deshalb gibt es mb_strlen() in der mb_-Erweiterung. Probieren Sie strlen auf Multi-Byte-Zeichen aus, um zu testen …

    – Maxim Krizhanovsky

    27. September 11 um 12:45 Uhr

  • @soulmerge Wenn Sie substr() für eine Multibyte-codierte Zeichenfolge verwenden, können Sie das letzte Zeichen in der Zeichenfolge unterbrechen.

    – Maxim Krizhanovsky

    27. September 11 um 12:46 Uhr

  • @soulmerge Wie Carlos Campderrós in einer anderen Antwort sagte, ist es möglich, str*() in mb_str*() zu überladen, sodass beim Aufrufen von strlen tatsächlich mb_strlen aufgerufen wird. Um zu sehen, ob dies aktiviert ist, überprüfen Sie mbstring.func_overload in php.ini. Siehe auch php.net/manual/en/mbstring.overload.php

    – PhoneixS

    15. März ’12 um 10:50 Uhr

  • Es gibt jetzt ein Hinweis auf der PHP-Handbuchseite für strlen(): “strlen() gibt die Anzahl der Bytes statt der Anzahl der Zeichen in einem String zurück.” Ich bin mir nicht sicher, ob das schon einmal da war, aber es bestätigt, dass diese Antwort richtig ist.

    – JD

    24. März 15 um 21:31 Uhr

1642603928 524 Messen Sie die Stringgrose in Bytes in PHP
mIFO

PHPs strlen() Die Funktion gibt die Anzahl der ASCII-Zeichen zurück.

strlen('borsc') -> 5 (Byte)

strlen('boršč') -> 7 (Byte)

$limit_in_kBytes = 20000;

$pointer = 0;
while(strlen($your_string) > (($pointer + 1) * $limit_in_kBytes)){
    $str_to_handle = substr($your_string, ($pointer * $limit_in_kBytes ), $limit_in_kBytes);
    // here you can handle (0 - n) parts of string
    $pointer++;
}

$str_to_handle = substr($your_string, ($pointer * $limit_in_kBytes), $limit_in_kBytes);
// here you can handle last part of string

.. oder Sie können eine Funktion wie diese verwenden:

function parseStrToArr($string, $limit_in_kBytes){
    $ret = array();

    $pointer = 0;
    while(strlen($string) > (($pointer + 1) * $limit_in_kBytes)){
        $ret[] = substr($string, ($pointer * $limit_in_kBytes ), $limit_in_kBytes);
        $pointer++;
    }

    $ret[] = substr($string, ($pointer * $limit_in_kBytes), $limit_in_kBytes);

    return $ret;
}

$arr = parseStrToArr($your_string, $limit_in_kBytes = 20000);

1642603928 333 Messen Sie die Stringgrose in Bytes in PHP
Ulver

Weiter zur PhoneixS-Antwort, um die korrekte Länge der Zeichenfolge in Bytes zu erhalten – Since mb_strlen() ist langsamer als strlen(), für die beste Leistung kann man die INI-Einstellung “mbstring.func_overload” überprüfen mb_strlen() wird nur verwendet, wenn es wirklich erforderlich ist:

$content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);

.

549050cookie-checkMessen Sie die Stringgröße in Bytes in PHP

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

Privacy policy