PHP str_replace Problem oder Bug?
-
21-09-2019 - |
Frage
Ich habe folgendes Problem;
Hier ist meine Zeichenfolge Ich versuche javascript:l("
aus der Zeichenfolge zu entfernen unter:
javascript:l("Bayou-La-Batre");
Mein Code ist;
$q_string = str_replace('javascript:l(" ','',$row['1']);
Aber es versagt.
Dies ist schneller als ein regex ersetzen und schneller.
Irgendwelche Ideen?
Lösung
Sie hinterließ einen Raum
$q_string = str_replace('javascript:l("','',$row['1']);
Andere Tipps
Ändern
$q_string = str_replace('javascript:l(" ','',$row['1']);
$q_string = str_replace('javascript:l("','',$row['1']);
Jedes Mal, wenn ich diese Art von Problem habe, versuche ich die Formatierung meiner Suchen / Ersetzen-Aufruf in einem dicktengleiche Editor, um zu sehen, ob etwas herausspringt
$q_string = str_replace('javascript:l(" ', '',
'javascript:l("Bayou-La-Batre")';
Format so, wird es offensichtlich, dass das 15. Zeichen des Suchbegriffs nicht die 15. Zeichen überein der Zeichenfolge, die durchsucht ([] gegen [B]).
Versuchen Sie das Leerzeichen entfernen und Sie sollten glücklich sein.
Sie können mit
$q_string = substr($row['1'], 14);
die gleichen Ergebnisse mit einem gewissen Geschwindigkeitsgewinn zu erhalten. Ich habe Geschwindigkeiten von drei Funktion getestet, so können Sie sehen, wie sie mit Geschwindigkeit vergleichen.
$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);
Der Ausgang dieses auf meinem Rechner
Bayou-La-Batre ")
Bayou-La-Batre ")
Bayou-La-Batre ")
Substr: 3,7492098808289
Str ersetzen: 4,5258920192719
Preg ersetzen: 5,8815109729767