2009-07-29 6 views
4

Gibt es eine bessere Möglichkeit, diese einfache Aufgabe zu erledigen? Wie mit einem Array oder einer anderen Methode?Kann dieser PHP-Code verbessert werden?

<?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); 
} 
?> 

Hier ist meine aktuelle Funktion

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 - Ok meine neue Funktion, nachdem die Vorschläge aus diesem Beitrag Danke Jungs

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

Warum möchten Sie verhindern, dass Ihre Benutzer "frutcake" oder "heist" sagen? – eyelidlessness

Antwort

15

auf Ihre FilterALLHTML Funktion ändern Mach das null überprüfen und es zurückgeben null? Dann können Sie alle if s wegwerfen.

Beispiel:

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

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

Edit:

ich fühlte sich wie eine Alternative zu den variablen Variablen teilen, wie ich mag die Idee nicht wirklich Stringliterale der Verwendung anstelle von Variablennamen. Referenzen den ganzen Weg :)

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); 

(Anmerkung: FilterALLHTML Implementierung von ersten Beispiel unterscheidet sich)

+0

+1 Ich mag Ihre Antwort, vielleicht könnten Sie ein wenig mehr in Ihrer Antwort ausführlich für diejenigen, die es nicht bekommen :) – Makach

+0

Ich mag es, ich habe nicht einmal daran gedacht, danke – JasonDavis

+1

Bitte Kommentar auf den Downvote ? Es macht mir nichts aus, aber ich hätte gerne eine konstruktive Kritik. Do not downvote nur weil es nicht deine Antwort ist :) – Thorarin

0

Ich glaube nicht, dass Sie die Leistung verbessern können, aber Sie können die Syntax verkürzen, aber es wird wobei diese an die Dolmetscher am Ende

<?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); 
?> 

„Standardwert“ mit ersetzt werden soll, was Sie den Wert sein möchten, wenn die Variable null ist

+0

ah, nach unten abgestimmt :(Bitte kommentieren. Das wird Geben Sie eine bessere Leistung als das Setzen des "Wenn" in der Funktion. Wenn das "Wenn" in der Funktion ist, ruft es immer die Funktion und das "Wenn" auf, aber wenn Sie zuerst das "Wenn" setzen, sparen Sie CPU-Zyklen für die Null Werte –

+0

Ich habe nicht downvote, aber ich halte Ihre Mikro-Optimierung nicht für ein gültiges Argument.Auch ist dieser Code weniger lesbar als das Original und unterscheidet sich funktionell vom Original .. – Thorarin

+0

Ich habe auch keinen Downvote gemacht, aber ich kann Verstehst du, warum es abgelehnt wurde IMO Du bewegst einfach die Komplexität, anstatt es einfacher/einfacher zu machen wie Thorarin :) – Makach

3

Nun, Sie könnten schon über eine Funktion schreiben, weil Sie viermal genau dasselbe machen.

Angenommen, FilterALLHTML ist keine benutzerdefinierte Funktion.

Oder fügen Sie einfach den Null-Check in die FilterALLHTML-Funktion ein und geben Sie bei Bedarf Null zurück.

Also, wenn Sie FilterALLHTML ändern kann dann würden Sie es wie folgt tun:

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

Ja, verwenden Sie PHP variable variables.

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

Wenn Sie wissen, dass alle Variablen zuvor definiert wurden, dann brauchen Sie die Nullprüfung nicht. Andernfalls verhindert die Nullprüfung, dass E_NOTICE-Fehler ausgelöst werden.

+0

Ich werde wahrscheinlich nur den Check in meine aktuelle Funktion einfügen, weil ich diese Funktion sehr oft benutze. Ich lege einfach die 4 auf diese Seite, aber dein Code ist wirklich sehr cool ! Ich werde es tun. nutze das irgendwann danke – JasonDavis

+1

Variable Variablen rock :) – zombat

1

Hinzufügen zu Thorarin-Antwort, können Sie Ihre filterall Funktion ändern, um ein Array als Eingabe zu akzeptieren, und es als Referenz übergeben wird es den Inhalt der Arrays ändern.

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


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

Wie Thorarin würde ich vorschlagen, anstatt wenn Ihre FilterALLHTML Funktionsprüfung für null aufweist.

3

zombats Antwort ist die beste, aber ich würde hinzufügen, dass Sie nicht wirklich nach null entweder suchen sollten. Wenn aus irgendeinem Grund FilterAllHTML ein Problem mit null Werten hat, was nicht der Fall sein sollte, setzen Sie die Prüfung auf null in der FilterAllHTML Funktionsdefinition.

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

eigentlich jetzt zurückdenken, als ich diesen Code vor fast 2 Jahren gemacht habe Ich denke, ich lese, dass in diesem Fall wäre es bessere Leistung nicht die FilterALLHTML Funktion aufrufen, wenn es nicht benötigt wird, wie ein NULL-Wert würde die Funktion nicht brauchen, also dachte ich, wenn ich diese vor dem Aufruf der Funktion herausfiltern könnte, wäre es besser. Ich bin mir nicht sicher, ob dies eine bessere Leistung ist oder nicht, es ist so lange her, dass ich das getan habe. Ich habe meine Funktion zu meinem Beitrag hinzugefügt, wenn Sie es sehen wollen – JasonDavis

+0

Egads, der Profanitätsfilter. – eyelidlessness

1

Ich habe nicht erwähnt, können Sie immer die Parameter als Verweis übergeben konnte die wiederholten Zuordnungen überspringen:

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

Ich glaube, Sie auch Hinweise auf das Array speichern kann, aber ich haven‘ Ich habe es versucht.

foreach (array(&$city, &$state, &$title, &$division) as $var) 
{ 
    FilterALLHTML($var); 
} 
Verwandte Themen