2009-07-29 3 views
4

아래의 간단한 작업을 수행하는 더 좋은 방법이 있습니까? 배열 또는 다른 메소드와 마찬가지로? 여기 이 PHP 코드를 개선 할 수 있습니까?

<?PHP 
// current way 
if ($city != NULL) { 
    $city = FilterALLHTML($city); 
} 
if ($state != NULL) { 
    $state = FilterALLHTML($state); 
} 
if ($title != NULL) { 
    $title = FilterALLHTML($title); 
} 
if ($division != NULL) { 
    $division = FilterALLHTML($division); 
} 
?> 

function FilterALLHTML($document) { 
    //old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html 
    $text = strip_tags($document); 
    $search = array ("/f.?u.?c.?k/i", 
       "/(s|$).?h.?i.?t/i", 
       '/(potspace|mycrib|palbolt)/i'); 
    $text = preg_replace ($search, '', $text); 
    return $text; 
} 

UPDATE 내 현재 기능입니다 - 좋아 내 새로운 기능이 게시물의 제안들 덕분에

function FilterALLHTML($var) { 
    //old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html 
    if ($var != null){ 
     $text = strip_tags($var); 
     $search = array ("/f.?u.?c.?k/i", 
        "/(s|$).?h.?i.?t/i", 
        '/(potspace|mycrib|palbolt|pot space)/i'); 
     $text = preg_replace ($search, '', $text); 
     return $text; 
    } 
    return null; 
} 
+3

왜 사용자가 "frutcake"또는 "as heist"라고 말하지 않도록 하시겠습니까? – eyelidlessness

답변

15
가 당신의 FilterALLHTML 기능을 변경

null 확인하고 돌려 보내십시오. null? 그러면 모든 if을 버릴 수 있습니다.

예 :

function FilterALLHTML($input) 
{ 
    if ($input === null) 
     return null; 

    // Original code, I'll just use strip_tags() for a functional example 
    return strip_tags($input); 
} 

편집 :

은 내가 문자열 리터럴 대신 변수 이름을 사용의 생각처럼 정말하지 않는 한, 변수 변수에 대한 대안을 공유하는 것 같은 느낌이 들었다. 참고 모든 방법 :

function FilterALLHTML(&$text) 
{ 
    if ($text !== null) 
    { 
     // Omitted regex bit for simplicity 
     $text = strip_tags($text); 
    } 
} 

$city = "<b>New York</b>"; 
$state = null; 
$title = "<i>Mr.</i>"; 

$fields = array(&$city, &$state, &$title); 
foreach ($fields as &$var) 
    FilterALLHTML($var); 

(참고 : FilterALLHTML 구현이 첫 번째 예 다르다)

+0

+1 나는 당신의 대답을 좋아한다. 어쩌면 당신은 그것을 얻지 못한 사람들을 위해 당신의 답장에서 좀 더 장황해질 수있다. :) – Makach

+0

나는 그것을 좋아한다. 나는 그 생각조차도하지 않았다. – JasonDavis

+1

downvote에 의견을 남겨주세요. ? 나는 괜찮습니다. 그러나 건설적인 비판을 원합니다. 당신의 대답이 아니기 때문에 그냥 downvote하지 마십시오 :) – Thorarin

0

난 당신이 성능을 향상시킬 수 있다고 생각하지 않습니다,하지만 당신은 구문을 단축 할 수 있지만 것 변수가 null

,691 경우로
<?PHP 
    $city = ($city == NULL) ? "default value" : FilterALLHTML($city); 
    $state = ($state == NULL) ? "default value" : FilterALLHTML($state); 
    $title = ($title == NULL) ? "default value" : FilterALLHTML($title); 
    $division = ($division == NULL) ? "default value" : FilterALLHTML($division); 
?> 

은 "기본값은"당신이 값을 원하는 무엇으로 대체해야

인터프리터에 동일하게 끝나게
+0

아, down-vote :(코멘트하십시오. 함수에 "if"를 넣는 것보다 더 나은 성능을 제공합니다. "if"가 함수에 있으면 함수와 "if"를 호출하지만 "if"를 먼저 넣으면 null에 대한 CPU주기를 절약 할 수 있습니다 값 –

+0

나는 downvote하지 않았지만 마이크로 최적화가 유효한 인수라고 생각하지 않습니다. 또한이 코드는 원본보다 읽기 쉽고 기능적으로 원본과 다릅니다. – Thorarin

+0

나는 downvote도하지 않았지만 왜 IMO가 Thorarin과 같이 더 쉽고 단순하게 만드는 대신 복잡성을 옮깁니다. – Makach

3

글쎄, 똑같은 일을 네 번하기 때문에 이미 함수 작성을 고려해 볼 수 있습니다.

가정 FilterLLHTML은 사용자 지정 함수가 아닙니다.

function Filter($var) 
{ 
    if ($var != null) 
    { 
     return FilterALLHTML($var); 
    } 
    return null; 
} 

또는 FilterALLHTML 함수에 null 체크를 포함하고 필요한 경우 null을 반환하십시오. 예를

function FilterALLHTML($var) 
{ 
    if ($var == null) 
    { 
     return null; 
    } 
    else 
    { 
     //do your filtering 
     return $filteredVar; 
    } 
} 
9

을 PHP의 variable variables를 사용하면 FilterALLHTML를 변경할 수있는 경우

그래서, 당신은 이런 식으로 그것을 할 것입니다.

$vars = array('city','state','title','division'); 
foreach($vars as $v) { 
    if ($$v != null) $$v = FilterAllHTML($$v); 
} 

모든 변수가 이전에 정의되었다는 사실을 알고있는 경우 널 확인이 필요하지 않습니다. 그렇지 않으면 널 검사로 E_NOTICE 오류가 발생하지 않습니다.

+0

그 기능을 매우 자주 사용하기 때문에 현재의 기능에 체크를 추가 할 것입니다.이 예제에서는이 페이지에 4를 넣었지만 코드는 정말 멋집니다. ! 나는 deff 할 것이다. 그 때로는 감사합니다 – JasonDavis

+1

가변 변수 rock :) – zombat

1

Thorarin의 답변을 추가하면 배열을 입력으로 받아들이 기 위해 filterall 함수를 변경할 수 있으며 참조로 전달하면 배열의 내용이 수정됩니다.

$tofilter = array($city,$state,$division,$title); 


filterall($tofilter); 
5
foreach (array('city', 'state', 'title', 'division') as $var) { 
    if ($$var != null) { 
     $$var = FilterALLHTML($$var); 
    } 
} 

Thorarin처럼 내가 대신하지만 널 (null)에 대한 FilterALLHTML 기능 검사를 가지는 게 좋을 것.

3

zombat의 답변이 가장 좋지만, 당신이 실제로 null을 확인하지 않아야한다고 덧붙입니다. 어떤 이유로 든 FilterAllHTMLnull 값과 관련된 문제점이있는 경우, null에 대한 확인을 FilterAllHTML 함수 정의에 넣으십시오.

$vars = array('city', 'state', 'title', 'division'); 
foreach($vars as $var) { 
    $$var = FilterAllHTML($$var); 
} 
+1

실제로이 코드를 거의 2 년 전에 만들었을 때 생각했습니다. 필자는이 경우 FilterillHTML 함수를 호출하지 않는 것이 성능이 좋을 것이라고 생각합니다. NULL 값은 함수를 필요로하지 않으므로 함수를 호출하기 전에 필터링 할 수 있다면 더 좋을 것이라고 생각했습니다. 나는 이것이 더 나은 수행인지 아닌지 잘 모르겠다. 그렇지 않은 지 오래다. 내 기능에 내 게시물을 추가하려면 – JasonDavis

+0

Egads, 욕설 필터를보고 싶습니다. – eyelidlessness

1

나는 당신이 항상 반복 할당 건너 참조로 매개 변수를 전달할 수는 언급 보지 못했다 : 난 당신이 또한 배열에 대한 참조를 저장할 수 있다고 생각

function FilterALLHTML(&$var) 
{ 
    if ($var == null) 
    { 
     $var = null; 
    } 
    else 
    { 
     $var = strip_tags($var); 
    } 
} 

을하지만 난 피난처 ' t 그것을 시도했다.

foreach (array(&$city, &$state, &$title, &$division) as $var) 
{ 
    FilterALLHTML($var); 
} 
관련 문제