문제

HTML & PHP가있는 문자열이 있습니다. 데이터베이스에서 문자열을 가져 오면 스크린에 반향하지만 PHP 코드는 표시되지 않습니다. 문자열은 다음과 같습니다.

   $string = 'Hello <?php echo 'World';?>';
   echo $string;

산출

   Hello

소스 코드

   Hello <?php echo 'World';?>

소스 코드를 살펴보면 PHP 라인을 볼 수 있습니다. 따라서 내가해야 할 일은 String에있는 PHP 세그먼트 만 Eval ()입니다.

고려해야 할 한 가지는 PHP가 주어진 시간에 문자열의 어느 곳에도 위치 할 수 있다는 것입니다.

* 명확하게 말하면, 내 PHP 구성이 정확합니다. 이것은 일부 PHP가 데이터베이스에서 버려지고 렌더링되지 않는 경우입니다. *

내가받을 수있는 도움을 주셔서 다시 한 번 감사드립니다.

도움이 되었습니까?

해결책

$str = "Hello
<?php echo 'World';?>";

$matches = array();

preg_match('/<\?php (.+) \?>/x', $str, $matches);

eval($matches[1]);

이것은 효과가 있지만 다른 사람들이 가지고 있고 제안하는 것처럼 이것은 끔찍한 생각입니다. 애플리케이션 아키텍처는 데이터베이스에 코드 저장을 중심으로 절대 진행해서는 안됩니다.

간단히 말해서, 항상 문자열을 표시 해야하는 페이지가있는 경우, 문자열을 데이터베이스에 저장하지 않고 제작을위한 코드가 아닙니다. 실제 데이터는 이것보다 더 복잡하지만 항상 데이터베이스에서 올바르게 모델링해야합니다.

편집 : 소스/보간을 올바르게 제거하려면 preg_replace_callback로 적응해야합니다.

다른 팁

PHP 코드를 평가해서는 안됩니다. PHP 통역사가 설치되어야하고 Apache+PHP가 올바르게 구성되어 있어야합니다. 이 .php 파일은 Hello World를 출력해야합니다.

편집에 대한 답변 :preg_replace_callback을 사용하여 PHP 부품을 가져 와서 평가하고 입력을 출력으로 바꾸고 반향하십시오. 하지만. 데이터베이스에서 문제를 평가해야한다면 거의 확신합니다. 설계 오류라고 확신합니다.

코드가 적절한 PHP이고 세미콜론으로 끝나는 한 평가 ()는 잘 작동해야합니다. 먼저 PHP 태그를 벗기고 평가하는 것은 어떻습니까?

다음 예제는 테스트하고 작동했습니다.

<?php
$db_result = "<?php echo 'World';?>";
$stripped_code = str_replace('?>', '', str_replace('<?php', '', $db_result));
eval($stripped_code);
?>

DB에서 검색하는 모든 것이 먼저 올바르게 소독되어 있는지 확인하십시오. 본질적으로 DB에 콘텐츠를 얻을 수있는 사람이 코드를 실행할 수있게되므로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top