PHP 평가 문자열을 배열로 변환하는 방법

PHPz
풀어 주다: 2023-04-25 10:15:39
원래의
553명이 탐색했습니다.

PHP 개발 중에 문자열을 배열로 변환해야 하는 경우가 있습니다. 이는 일반적으로 eval 함수를 사용할 때 발생합니다. eval 함수는 문자열을 PHP 코드로 실행할 수 있으므로 문자열을 통해 코드를 동적으로 생성하고 실행할 수 있습니다. 어떤 경우에는 eval 함수를 통해 생성된 배열을 실행하고 싶습니다. 이 시점에서 문자열을 eval 함수에서 사용하기 전에 배열로 변환해야 합니다.

이 기사에서는 eval 함수를 더 잘 활용하기 위해 PHP를 사용하여 문자열을 배열로 변환하는 방법을 알아봅니다.

1. eval 함수를 사용하세요

이 글의 코드 예제를 작성하기 전에 먼저 eval 함수를 이해해야 합니다.

eval 함수는 유효한 PHP 코드를 실행할 수 있는 PHP의 매우 강력한 함수입니다. 일반적으로 eval 함수를 사용하여 PHP 코드를 동적으로 생성하고 실행하는 것을 볼 수 있습니다. 예를 들어 eval 함수를 사용하여 다음 코드를 실행할 수 있습니다.

$code = 'echo "Hello, World!";';
eval($code);
로그인 후 복사

이 코드는 "Hello, World!"라는 문자열을 출력합니다.

eval 함수를 사용하면 모든 PHP 코드를 매우 편리하게 실행할 수 있지만 일부 보안 위험도 따릅니다. eval 함수는 어떤 코드든 실행할 수 있기 때문에 악의적인 사용자가 악성 코드 조각을 입력하여 공격 코드를 실행할 수 있습니다. 따라서 eval 함수를 사용할 때는 주의가 필요합니다.

2. eval 함수의 문자열을 배열로 변환

이제 eval 함수의 문자열을 사용하여 다음 코드와 같이 배열을 생성한다고 가정해 보겠습니다.

$code = 'array("apple", "banana", "orange")';
$result = eval($code);
로그인 후 복사

이 코드의 목적은 다음과 같습니다. 세 개의 과일 이름이 포함된 배열을 만듭니다. 현재 배열은 $code 변수에 문자열로 기록되었습니다. eval 함수를 사용하여 이 문자열을 실행하려면 먼저 이를 실제 배열로 변환해야 합니다.

다행히도 PHP는 문자열을 배열로 변환할 수 있는 unserialize라는 함수를 제공합니다. unserialize는 직렬화된 데이터를 다시 PHP 변수로 변환하는 데 사용되는 PHP의 역직렬화 함수입니다. 생성된 배열을 문자열로 저장할 것이므로 unserialize 함수가 유용합니다. 다음 코드를 사용하여 문자열을 실제 배열로 변환할 수 있습니다.

$code = 'array("apple", "banana", "orange")';
$array = unserialize(sprintf('a:%d:{%s}', count($arr = eval("return $code;")), implode(array_map(static fn($v) => "i:" . strlen($v) . ";s:$v", $arr))));
로그인 후 복사

마지막으로 이를 모두 모아서 필요한 프로세스를 완료할 수 있습니다.

function codeToArray($code) {
    return unserialize(sprintf('a:%d:{%s}', count($arr = eval("return $code;")), implode(array_map(static fn($v) => "i:" . strlen($v) . ";s:$v", $arr))));
}

$code = 'array("apple", "banana", "orange")';
$result = codeToArray($code);

print_r($result); // 输出 ["apple", "banana", "orange"]
로그인 후 복사

3. 코드 설명

이 함수에서는 eval 함수를 통해 코드에서 반환된 배열 $arr을 얻습니다. 이 배열을 사용하여 직렬화된 데이터를 특정 형식으로 저장하는 필수 문자열을 만듭니다.

여기서 설명해야 할 세 가지 변수가 있습니다. 첫 번째 변수는 a이며 이는 PHP 배열임을 의미합니다. 두 번째 변수는 %d입니다. 이는 정수 값으로 바꿔야 하는 숫자 서식 문자열의 자리 표시자입니다. 여기서는 배열 요소의 총 개수로 대체됩니다. 마지막 변수는 %s입니다. 이는 문자열 형식 문자열의 자리 표시자이기도 하며 문자열 값으로 바꿔야 함을 나타냅니다. 여기서는 직렬화된 배열 요소로 대체됩니다.

평가 함수를 사용할 수 있는 또 다른 방법은 대괄호 연산자를 사용하여 평가 함수가 결과를 반환하도록 하는 것입니다. 코드를 더욱 간단하게 만들기 위해 대괄호 연산자를 사용하여 eval 함수가 배열을 반환하도록 한 다음 해당 배열을 serialize 함수에 전달할 수 있습니다.

function codeToArray($code) {
    return unserialize(sprintf('a:%d:{%s}', count($arr = eval("return ($code);")), implode(array_map(static fn($v) => "i:" . strlen($v) . ";s:$v", $arr))));
}

$code = 'array("apple", "banana", "orange")';
$result = codeToArray($code);

print_r($result); // 输出 ["apple", "banana", "orange"]
로그인 후 복사

여기에서는 대괄호 연산자를 사용하여 eval이 배열을 반환하도록 합니다. 따라서 더 이상 eval에서 배열을 래핑할 필요가 없으며 배열을 직접 사용하면 됩니다.

4. 요약

이 글에서는 unserialize 함수를 사용하여 문자열을 배열로 변환하는 방법을 살펴보았습니다. 이는 eval 함수를 사용할 때 매우 유용한 기술입니다. 코드를 실행하고 해당 코드에서 배열을 사용하기 위해 PHP에서 평가 함수를 사용해야 하는 경우 이 문서가 도움이 될 수 있습니다.

위 내용은 PHP 평가 문자열을 배열로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!