2012-10-26 8 views
0

현재 텍스트 파일에서 검색하고 바꾸는 기능이 있습니다.vars 및 값을 배열의 일부로 만드는 PHP

// Input 
$ect = array('Visssa', 'Lisssa', 'her'); 

// Placeholders in the file 
$put = array('lname', 'fname', 'hisher'); 


// Replace the placeholders 
$oput = str_replace($put, $ct, 'tmpfile.txt'); 

이것은 전체 프로그램이 아니지만 tmpfile.txt에있는 값을 $ etc 어레이에있는 값으로 바꿉니다. 그리고 그것은 완벽하게 작동합니다.

하지만 내가해야 할 일은 var가 (바꿔서/가져 오기) 전달 된 모든 vars를 가져 와서 var가 바꿀 값이고 값이 바꿀 값이되도록 배열을 만드는 것입니다. 나는 톰과 대체하고 귀신의 모든 인스턴스 될 파일의 ​​URL LNAME의 http://xyz.com/?lname=tom&ogre=yes

모든 인스턴스를 보낸 경우

그래서, 그래로 대체 될 것이다.

어떻게 든 그것은 get/post에서 전달 된 모든/모든 변수를 얻습니다. 그리고 위의 배열은 var가 파일의 값으로 대체되도록합니다.

+0

foreach ($ _ REQUEST as $ key => $ value) { echo 'Key ='. $ 키. '
'; echo '값 ='. $ 값; } – Chris

답변

1

이 작업을 수행 :

$etc = array_keys($_GET); 
    array_walk($etc,"addBraces"); 
    $put = array_values($_GET); 
    $oput = str_replace($etc, $put, 'tmpfile.txt'); 

    function addBraces(&$item) 
    { 
     $item = "{".$item."}"; 
    } 

물론이 모든 규칙 등 ...

+0

+1하지만 GET 및 POST를 수행하려면'$ _REQUEST'를 사용하십시오. – Vulcan

+0

이것은 변수를 대체하지 않는 것 같습니다. 물론 나는 $ _REQUEST가 아닌 $ _GET을 시도했다. – Chris

+0

이 방법을 사용하면 마지막 줄이 다음과 같이 변경되었습니다. $ oput = str_replace ($ etc, $ put, 'tmpfile.txt'); – Chris

0

parse_str()이

function addreplacetokens(&$input) 
{ 
    $input = '{' . $input . '}'; 
} 

$string = 'word {lname} word {fname} word {hisher} word'; 
$filter = array('lname','fname','hisher'); 
parse_str($_SERVER['QUERY_STRING'],$replacements); 
foreach($replacements as $key => $value) 
    if(in_array($key,$filter) == false) 
    unset($replacements[$key]); 
// this next block can be removed if you don't want a default 
foreach($filter as $key) 
    if(array_key_exists($key,$replacements) == false) 
    $replacements[$key] = ''; // change this! 
// copy the array so the keys can be filtered 
$replacements_keys = array_keys($replacements); 
array_walk($replacements_keys,'addreplacetokens'); 
$string = str_replace($replacements_keys,$replacements,$string); 
echo $string; 
에 대한 완벽한 될 것 "항상/당신의 데이터를 탈출 santize"

그래서 ? lname = hello이 출력됩니다.

단어 안녕하세요 단어 단어 단어

다음 문제, 당신은 단어 경계 여부를 처리해야합니까입니까?

+0

맞습니다, 이것이 완벽합니다! – Chris

+0

쿼리 문자열에서 파싱 된 후에도 원하는 대체물 만 분리 할 수 ​​있지만 자리 표시 자 값에 $ 치환을 필터링하는 것이 좋습니다. – Scuzzy

+0

내 수정 된 코드를 참조하십시오. 다른 쿼리 문자열 매개 변수를 무시할 수 있도록 필터 배열이 있습니다. – Scuzzy