현재 위치: > 최신 기사 목록> 데이터베이스 문자열을 처리 할 때 MB_STRCUT 기능의 일반적인 오류

데이터베이스 문자열을 처리 할 때 MB_STRCUT 기능의 일반적인 오류

gitbox 2025-05-29

MB_Strcut는 PHP를 사용하여 멀티 바이트 스트링을 처리 할 때 매우 실용적인 기능입니다. 전통적인 서브 스트스트 와 같은 멀티 바이트 문자를 잘라서 발생하는 코드 문제없이 지정된 바이트 길이를 가로 채울 수 있습니다. 그러나 데이터베이스에서 문자열을 운영 할 때, 특히 다국어 컨텐츠 및 인코딩 변환과 관련하여 MB_STRCUT 의 사용도 일부 오류가 발생하기 쉽습니다. 이 기사에서는 이러한 일반적인 오류와 회피를 자세히 분석합니다.


1. MB_STRCUT 소개

MB_STRCUT는 문자 수가 아닌 문자열에서 지정된 바이트 수를 잘라내는 것입니다. 다중 바이트 인코딩 용으로 설계되었으며 다중 바이트 문자를 잘라서 발생하는 차량 코드를 피하십시오.

기능 프로토 타입은 다음과 같습니다.

 mb_strcut(string $string, int $start, int $length = null, string $encoding = null): string
  • $ 문자열 : 문자열을 입력하십시오.

  • $ 시작 : 시작 바이트 위치.

  • $ 길이 : 가로 채는 바이트 길이 (선택 사항).

  • $ 인코딩 : 문자 인코딩, 기본값은 내부 인코딩입니다.


2. 일반적인 오류 및 원인

1. 일관되지 않은 인코딩은 잘린 오류가 발생합니다

데이터베이스에 저장된 문자열 인코딩은 MB_Strcut 에서 사용하는 인코딩과 일치하지 않으므로 비정상적인 차단 결과가 발생합니다. 예를 들어, 데이터베이스 필드는 UTF-8 인코딩이지만 프로그램은 기본 내부 인코딩 (아마도 ISO-8859-1)을 사용하므로 바이트 자르기 위치 오류가 발생합니다.

오류 징후 :
인터셉트 결과는 차단되고 캐릭터는 불완전하며 프로그램도 예외를 던집니다.

피하는 방법 :

  • 예를 들어 $ 인코딩을 식별하십시오.

 mb_strcut($string, 0, 10, 'UTF-8');
  • 데이터베이스 연결 및 쿼리 결과의 인코딩이 프로그램의 인코딩과 일치하는지 확인하십시오. MySQL은 다음과 같이 실행할 수 있습니다.

 SET NAMES 'utf8mb4';

또는 PDO 연결 시점을 지정하십시오.

 new PDO('mysql:host=...;dbname=...', $user, $pass, [
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
]);

2. 시동 바이트 위치 계산의 오류

mb_strcut$ start 매개 변수는 문자 위치가 아닌 바이트 위치입니다. 개발자가 바이트 위치로 캐릭터 위치를 전달하는 데 익숙한 경우 위치 편차를 가로 채 웁니다.

오류 징후 :
가로 채는 문자열은 기대치에서 시작하여 문자가 누락되거나 거절 될 수 있습니다.

피하는 방법 :

  • MB_STRPOS를 사용하여 바이트 위치를 얻을 때 동일한 인코딩을 지정하십시오.

  • 문자 위치를 사용하려면 먼저 문자 위치를 바이트 위치로 변환해야합니다.

예:

 $pos_char = 3; // 1.3캐릭터
$pos_byte = strlen(mb_substr($string, 0, $pos_char, 'UTF-8'));
$result = mb_strcut($string, $pos_byte, 10, 'UTF-8');

3. 가로 값 길이가 잘못되면 문자 자리가 자릅니다

$ 길이는 바이트 길이입니다. 가로 채기 길이가 다중 바이트 문자 중간에 있으면 MB_Strcut는 전체 문자 경계로 안전하게 자르지 만 논리 오류로 인해 길이가 부적절하게 설정되면 차단 효과에 영향을 줄 수 있습니다.

피하는 방법 :

  • 요구 사항에 따라 바이트 길이를 합리적으로 계산하십시오.

  • 고정 된 수의 문자를 가로 채려면 mb_substr 와 함께 사용할 수 있습니다.


3. 실제 사례

중국 문자열이 데이터베이스에 저장되어 있다고 가정하면 처음 10 바이트를 가로 채려고합니다.

 <?php
// 데이터베이스에서 문자열을 가져옵니다
$string = "안녕하세요,환영mb_strcut기능!";

// 인코딩을 지정합니다
$encoding = 'UTF-8';

// 인터셉트 전10바이트
$result = mb_strcut($string, 0, 10, $encoding);

echo $result;
?>

이 예에서 MB_STRCUT는 중국어의 절반이 잘리지 않고 출력 문자열이 차단되지 않도록합니다.


4. 요약

  • mb_strcut를 사용하는 경우 명확하게 인코딩하고 데이터베이스 인코딩과 일치하십시오.

  • $ start$ 길이는 문자 단위가 아닌 바이트 단위이므로 신중하게 계산해야합니다.

  • 불일치를 인코딩하여 오류를 피하기 위해 데이터베이스 문자 세트 설정과 조정하십시오.

  • 문자 인터셉트의 경우 MB_SUBSTR을 사용하는 것이 좋습니다. MB_STRCUT 는 바이트 인터셉트가 가로 채는 시나리오에 더 적합합니다.

위의 기술을 마스터하면 MB_Strcut의 데이터베이스 문자열 처리에서 일반적인 오류를 효과적으로 피할 수 있으며 프로그램이 정확하고 안전한 멀티 바이트 문자열을 출력 할 수 있습니다.


 <?php
// 예:데이터베이스에서 간단한 멀티 바이트 문자열을 보안하십시오

// 데이터베이스가 연결되어 있다고 가정하십시오,그리고 캐릭터 세트는입니다utf8mb4

// 데이터베이스에서 문자열을 읽으십시오
$query = "SELECT content FROM articles WHERE id = 1";
$result = $pdo->query($query);
$row = $result->fetch(PDO::FETCH_ASSOC);

$content = $row['content'];
$encoding = 'UTF-8';

// 인터셉트 전50바이트,Barled Code를 피하십시오
$snippet = mb_strcut($content, 0, 50, $encoding);

echo $snippet;
?>

멀티 바이트 스트링 처리에 대해 자세히 알아 보려면 다음을 방문 할 수 있습니다.
https://gitbox.net/php/manual/zh/function.mb-Strcut.php