Čiščenje stringa ali brisanje array elementa?

Kar nekaj časa se že ubadam s problemom, ki sem ga sicer že rešil, a je zadeva prepočasna (včasih gre čez mejo 30 sek).

Imam funkcijo, ki mi generira stringe, katere potem mečem v array. Stringe pred tem moram preveriti ali ustrezajo pogojem. Rad bi se znebil stringov, ki vsebujejo določene znake ( afno, narekovaje, podpičja, morajo vsebovati piko,...).

funkcija, ki preverja string se začne takole:

if (($pdf == "f" ) or (strpos ($string, "@")>0) or (strpos ($string, ":")>0) or (strpos ($string, ".") === false) or (substr_count($string, '...')>0)
{
echo "string ni ok";}
else
{
echo "string je ok";
}

Zadeva je prepočasna, ker imam kar nekaj iteracij $string-a. Mislim, da ne bo boljše niti če nafilam array s stringi in se potem spravim na elemente arraya. Namreč še vedno rabim hitrejšo funkcijo, ki bi mi pregledala string.

Poskusil sem tudi že s pregmatch(), countchar(),...

Eni ajdias?

xino07

5 odgovorov

Koliko pa imas teh stringov? Kaksen je input in kaksen je zeljeni output? Povej malo vec...

Koliko pa imas teh stringov? Kaksen je input in kaksen je zeljeni output? Povej malo vec...

Skripta predeluje max (zadeva je nastavljiva) 16410, torej 640 stringov dolžine približno 200 char.

Dejansko gre za Google scrapper, ki filtrira stavke iz HTMLja. Torej input je "svašta", output pa je normalen stavek z veliko začetnico in piko na koncu.

xino

in to traja 30 sekund? tisti funkcija zagotovo ne porabi 30 sekund za 640 stringov... razen mogoce, ce to delas na zx spectrumu...

povej, kaj bi rad dosegel...

in to traja 30 sekund? tisti funkcija zagotovo ne porabi 30 sekund za 640 stringov... razen mogoce, ce to delas na zx spectrumu...

povej, kaj bi rad dosegel...

Vini sej je lepo, da bi rad pomagal, a za kaj več povedat bi moral imeti že risalno desko...ali pa kar pastat celotnen php file. Zadeva definitivno porabi včasih 30 sek. Če pustim samo prvi pogoj v if stavku potem plune ven po 5-6 sek.

Res pa je, da nekaj časa porabi za skeniranje celotnega HTMLja in izločanje "grobega stringa".

Mogoče je krivo to, da imam kar tri do-while zanke - eno znotraj druge. Prva izloča stringe, okrog nje vrtim filtriranje, zunanja pa služi za incremet po google straneh.

Anyway, sem mislil da je zadeva bolj preprosta. Prečesal sem tudi tuje forume, a brez konkretnega rezultata.
Najboljši približek sem dobil na devshed forumu:

Možakar tole uporablja za čiščenje user inputa:

<?php

function clean_post_field($var_name, $field_name, $filter, $required = false ,  $max_length = 0) {
    if ($required && !isset($_POST[$var_name])) {
        echo "$field_name is required!";
        return false;
    }

    if (preg_match("/$filter/", $_POST[$var_name])) {
        echo "$field_name contain invalid characters";
        return false;
    }

    if ($max_length && strlen($_POST[$var_name]) > $max_length) {
        echo "$field_name must contain less than $max_length characters";
        return  false;
    }

    if (preg_match("/[<](\w+)((\s+)(\w+)[=]((\w+)|(\"\.\")|('\.')))*[>]/", $_POST[$var_name]))  {
        echo "HTML or Javascript found in POST Field Name: " . $var_name;
        return false;
    }

    if(get_magic_quotes_gpc()) {
        $raw_text = stripslashes($_POST[$var_name]);
    }  else {
        $raw_text = $_POST[$var_name];
    }

    return $raw_text;
}

//example
$first_name = clean_post_field("firstName", "First Name", "[^A-Za-z \'\-]", true, 100);
?>

Verjetno bom malo poexperimentiral z drugim in četrtim if stavko. Vseeno hvala za tvoj čas.

xino

jah, ce ciklas po straneh, potem moras definitivno vzeti v zakup tudi odzivnost googlovega streznika, prenose, ...

takole brez podatkov, kaj sploh pocnes, res zal tezko pomagam :)