Hi!
Es gibt in dieser Drupal-Installation folgende Funktion
[...]
case '%%':
return '%';
case '%f':
return (float) array_shift($args);
[...]
Na bitte, damit wird das Problem nachvollzieh- und erklärbar.
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.
Anhand des obigen Ausschnittes wirst du bemerken, dass %f und %% durch diese Funktion eine Sonderbehandlung erfährt. Wenn du dir mal allgemein die case-Zeilen ansiehst, wirst du noch einige andere Prozent-Kombinationen sehen, die ebenfalls zu Verwirrung führen.
Der %f-zu-0-Fall erklärt sich dadurch, dass in $args ein Argument erwartet wird, das da sicherlich nicht drinsteht. array_shift() liefert dann null, was durch den Typecast zu float zu 0 wird. Und statt des %% wird nur ein % zurückgegeben.
Frage: wie verhindere ich das, denn die Funktion wird ja ihre Berechtigung haben? Warum wird "%f" umgewandelt?
Diese Funktion hält also für einige Prozent-Kombinationen eine Sonderbehandlung bereit. Wenn du diese nicht haben möchtest, musst du %% notieren, wenn du exakt ein % an das DBMS schicken möchtest.
Lo!