2011-09-18 2 views
1

복잡한 문제가 있습니다. 텍스트가 매우 길어서 텍스트 안에 php 함수를 호출해야합니다. 함수 이름은 myfunction()입니다. 나는 다음과 같은 방법으로 텍스트를 내 텍스트에 포함시켰다 : "텍스트 텍스트 텍스트 myfunction [1,2,3,4,5]; 더 많은 텍스트 텍스트 ..."PHP에서 preg_replace를 사용하여 텍스트를 함수 결과로 바꾸는 방법?

나는 각각을 바꾸려고한다. myfunction [...] 함수의 결과와 [] 대괄호 변수를 비교합니다.

<?php echo preg_replace('/myfunction[[0-9,]+]/i',myfunction($1),$post['content']); ?> 

하지만, 그것은`가 작동하지 :

내 코드입니다.

매개 변수는 여러 값을 포함 할 수 있으므로 배열이어야합니다.

+0

사용중인 코드를 보여주십시오. 지금은 볼 수 없습니다. – iBobo

답변

1

수정 코드가 preg_replace 인 경우 e 수정자를 사용하면 임의 코드 실행이 가능하기 때문에 피해야합니다. 대신 preg_replace_callback을 사용하십시오. 조금 더 장황하지만 훨씬 더 효과적입니다.

echo preg_replace_callback('/myfunction\[([0-9,]+)\]/i', function($matches) { 
    $args = explode(',', $matches[1]); // separate the arguments 
    return call_user_func_array('myfunction', $args); // pass the arguments to myfunction 
}, $post['content']); 

익명 기능을 사용합니다. PHP 5.3 이전 버전을 사용하는 경우이 기능을 사용할 수 없습니다. 매뉴얼 페이지의 지시에 따라 이름이 지정된 함수를 만들어 대신 사용해야합니다.

-1

"e"한정자를 추가하고 정규 표현식에 []을 이스케이프하고 두 번째 인수를 문자열로 지정해야합니다. 그것이 내가 할 수있는 모든 그래서 난 정말 어떻게 데이터가 구조화되지 않은

$text = preg_replace('/myfunction\[(.*?)\]/e', 'myfunction("$1")', $text); 

:

preg_replace('/myfunction\[[0-9,]+\]/ei','myfunction("$1")',$post['content']); 
0

당신은 (EVAL에 대한) preg_replace()의 "E"수정을 사용할 수는 다음과 같이 사용 당신을 도와주세요. 해당 솔루션을 탐색 할 수 있습니다. PHP Manual 가입일

이 수정이 설정된 경우

E (PREG_REPLACE_EVAL) 는 preg_replace이다()는, 대체 문자열에 대해 역의 정상 교체를 수행 PHP 코드로 평가하고, 그 결과를 사용하여 검색 문자열을 대체합니다. 작은 따옴표, 큰 따옴표, 백 슬래시() 및 NULL 문자는 대체 된 역 참조의 백 슬래시로 이스케이프됩니다.

관련 문제