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 ????
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:
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.
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
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
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:
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:
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