programing

문자열 크기(바이트) 측정(php)

jooyons 2023. 8. 13. 09:42
반응형

문자열 크기(바이트) 측정(php)

포털 부동산 피드를 하고 있는데 문자열의 최대 길이가 20,000바이트(20kb)여야 한다는 메시지가 뜨지만, 이런 경우는 처음입니다.

측정 방법bytea 크기varchar string그래서 저는 잠시 루프를 해서 그것을 다듬을 수 있습니다.

mb_strlen()을 사용하면 멀티바이트 또는 단일바이트 문자열에 대한 걱정 없이 바이트 문자만 있는 인코딩을 사용하여 바이트 길이를 가져올 수 있습니다.예를 들어 drake127이 mb_strlen의 코멘트에서 말한 것처럼 '8bit' 인코딩을 사용할 수 있습니다.

<?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 ]] )

문자열이 아스키 인코딩인지 멀티바이트 형식으로 인코딩되었는지 확인해야 합니다.

전자의 경우에는 그냥strlen.

후자의 경우 문자당 바이트 수를 찾아야 합니다.

strlen 설명서는 방법의 예를 제공합니다. http://www.php.net/manual/en/function.strlen.php#72274

바이트 크기 또는 문자열 길이를 의미합니까?

바이트 크기는 로 측정되는 반면 문자열 길이는 를 사용하여 쿼리됩니다.사용할 수 있습니다.substr()문자열을 X바이트로 트리밍합니다(댓글에서 Darhazer가 지적한 대로 멀티바이트 인코딩이 있는 경우 문자열이 끊어집니다).mb_substr()문자열 인코딩에서 X자로 트리밍합니다.

PHP의 함수는 ASCII 문자 수를 반환합니다.

strlen('borsc')-> 5 (바이트)

strlen('boršč')-> 7(바이트)

$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

또는 다음과 같은 기능을 사용할 수 있습니다.

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);

PhoneixS 응답에 추가하여 바이트 단위로 올바른 문자열 길이 가져오기 - 이후mb_strlen()보다 느림strlen()최고의 성능을 위해 "mbstring"을 확인할 수 있습니다.func_bullet" ini 설정을 사용하여mb_strlen()실제로 필요한 경우에만 사용됩니다.

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

언급URL : https://stackoverflow.com/questions/7568949/measure-string-size-in-bytes-in-php

반응형