65

ポータル用の不動産フィードを作成していて、文字列の最大長は 20,000 バイト (20kb) である必要があると表示されますが、これに遭遇したことはありません。

byteのサイズを測定するにはどうすればよいですかvarchar string。そのため、while ループを実行してトリミングすることができます。

4

5 に答える 5

90

mb_strlen() を使用すると、マルチバイト文字列またはシングルバイト文字列を気にせずに、バイト文字のみを含むエンコーディングを使用してバイト長を取得できます。たとえば、drake127 が mb_strlen のコメントで述べているように、「8 ビット」エンコーディングを使用できます。

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

PHPには実際にmb_strlenを呼び出すためにstrlenをオーバーロードするオプションがあるため、strlen関数を使用すると問題が発生する可能性があります。詳細については、http://php.net/manual/en/mbstring.overload.phpを参照してください。

マルチバイト文字の途中で分割せずに文字列をバイト長でトリムするには、次を使用できます。

mb_strcut(string $str, int $start [, int $length [, string $encoding ]] )
于 2012-03-15T10:55:43.987 に答える
29

文字列がASCIIエンコードされているか、マルチバイト形式でエンコードされているかを把握する必要があります。

前者の場合、そのまま使用できますstrlen

後者の場合、1 文字あたりのバイト数を見つける必要があります。

strlen のドキュメントには、その方法の例が示されています: http://www.php.net/manual/en/function.strlen.php#72274

于 2011-09-27T12:19:38.467 に答える
28

バイトサイズまたは文字列の長さを意味しますか?

バイト サイズは で測定されstrlen()ますが、文字列の長さは で照会されmb_strlen()ます。を使用substr()して、文字列を Xバイトにトリミングし(コメントで Darhazer が指摘しているように、マルチバイト エンコーディングがある場合は文字列が壊れることに注意してください) mb_substr()、文字列のエンコーディングで X 文字にトリミングすることができます。

于 2011-09-27T12:19:18.533 に答える