t.sebesta: doppeltes %-Zeichen?

Beitrag lesen

SO ich habe folgendes festgestellt:

Es gibt in dieser Drupal-Installation folgende Funktion

function _db_query_callback($match, $init = FALSE) {  
  static $args = NULL;  
  if ($init) {  
    $args = $match;  
    return;  
  }  
  
  switch ($match[1]) {  
    case '%d': // We must use type casting to int to convert FALSE/NULL/(TRUE?)  
      $value = array_shift($args);  
      // Do we need special bigint handling?  
      if ($value > PHP_INT_MAX) {  
        $precision = ini_get('precision');  
        @ini_set('precision', 16);  
        $value = sprintf('%.0f', $value);  
        @ini_set('precision', $precision);  
      }  
      else {  
        $value = (int) $value;  
      }  
      // We don't need db_escape_string as numbers are db-safe.  
      return $value;  
    case '%s':  
      return db_escape_string(array_shift($args));  
    case '%n':  
      // Numeric values have arbitrary precision, so can't be treated as float.  
      // is_numeric() allows hex values (0xFF), but they are not valid.  
      $value = trim(array_shift($args));  
      return is_numeric($value) && !preg_match('/x/i', $value) ? $value : '0';  
    case '%%':  
      return '%';  
    case '%f':  
      return (float) array_shift($args);  
    case '%b': // binary data  
      return db_encode_blob(array_shift($args));  
  }  
}

Diese Funktion wandelt den String "%film und utopie%" um in "0film und utopie%" und damit kann es kein Ergebnis geben. Bei Großschreibung passiert das nicht und bei vorliegen eines doppelten %% ebenfalls nicht, da nur das jeweils erste %-Zeichen entfernt wird.

Frage: wie verhindere ich das, denn die Funktion wird ja ihre Berechtigung haben? Warum wird "%f" umgewandelt?