Question

J'ai la question suivante:

Voici ma chaîne, je suis en train de retirer javascript:l(" de la chaîne ci-dessous:

javascript:l("Bayou-La-Batre");

Mon code est;

$q_string = str_replace('javascript:l(" ','',$row['1']);

Mais il est défaillant.

Ceci est plus rapide qu'une regex remplacer et plus rapide.

Toutes les idées?

Était-ce utile?

La solution

Vous avez laissé un espace

$q_string = str_replace('javascript:l("','',$row['1']);

Autres conseils

Modifier

$q_string = str_replace('javascript:l(" ','',$row['1']);

à

$q_string = str_replace('javascript:l("','',$row['1']);

Chaque fois que je vais avoir ce genre de problème, j'essayer de formater ma recherche / remplacer appel dans un éditeur monospaced pour voir si quelque chose ressorte

$q_string = str_replace('javascript:l(" ', '', 
                        'javascript:l("Bayou-La-Batre")';

formated comme ça, il devient évident que le 15 caractère de la chaîne de recherche ne correspond pas aux 15e caractères de la chaîne qui est recherchée ([] par rapport à [B]).

Essayez de supprimer que les espaces et vous devriez être heureux.

Vous pouvez utiliser

$q_string = substr($row['1'], 14);

pour obtenir les mêmes résultats avec un certain gain de vitesse. J'ai testé trois vitesses de fonction afin que vous puissiez voir comment ils se comparent avec la vitesse.

$string = 'javascript:l("Bayou-La-Batre")';

$str_replace = function($string) {
    return str_replace('javascript:l("', '', $string);
};

print $str_replace($string) . "\n";

$substr = function($string) {
    return substr($string, 14);
};

print $substr($string) . "\n";

$preg_replace = function($string) {
    return preg_replace('/^[a-z:\(]+"/', '', $string);
};

print $preg_replace($string) . "\n";

function measure($function, $string) {
    $start = microtime(true);
    for($i = 0; $i < 1000000; $i++) {
        $function($string);        
    }
    return microtime(true) - $start;
}

print 'Substr: ' . measure($substr, $string) . "\n";
print 'Str replace:' . measure($str_replace, $string) . "\n";
print 'Preg replace:' . measure($preg_replace, $string);

La sortie de ce sur ma machine

  

Bayou-La-Batre ")
  Bayou-La-Batre ")
  Bayou-La-Batre ")
  Substr: 3,7492098808289
  remplacer Str: 4.5258920192719
  Preg remplacer: 5,8815109729767

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top