Dollarzeichen ($) für die Kennwortzeichenfolge, die als Variable behandelt wird

Lesezeit: 4 Minuten

Dollarzeichen fur die Kennwortzeichenfolge die als Variable behandelt wird
ncatnow

Ich habe einige Zeit damit verbracht, ein Problem zu beheben, bei dem eine PHP/MySQL-Webanwendung Probleme hatte, sich mit der Datenbank zu verbinden. Auf die Datenbank konnte von der Shell und phpMyAdmin mit genau denselben Anmeldeinformationen zugegriffen werden, und es machte keinen Sinn.

Es stellte sich heraus, dass das Passwort ein $-Zeichen enthielt:

$_DB["password"] = "mypas$word";

Das gesendete Passwort war “mypas”, was offensichtlich falsch ist.

Was ist der beste Weg, um dieses Problem zu lösen? Ich habe dem $ mit einem \ entgangen

$_DB["password"] = "mypas\$word";

und es hat funktioniert.

verwende ich generell $string = 'test' für Saiten, wodurch ich es wahrscheinlich vermieden habe, vorher darauf zu stoßen.

Ist dieses Verhalten korrekt? Was wäre, wenn dieses Passwort in einer Datenbank gespeichert wäre und PHP es herausziehen würde – würde dasselbe Problem auftreten? Was fehlt mir hier…

Dollarzeichen fur die Kennwortzeichenfolge die als Variable behandelt wird
Thomas Bonini

$_DB['password'] = 'mypas$word';

Zeichenfolgen in einfachen Anführungszeichen werden nicht verarbeitet und unverändert übernommen. Sie sollten immer Zeichenfolgen in einfachen Anführungszeichen verwenden, es sei denn, Sie benötigen ausdrücklich die Substitutionen $variable oder Escape-Sequenzen (\n, \r usw.). Es ist schneller und weniger fehleranfällig.

  • Danke für deine Antwort. Es scheint, dass dies ein Problem der besten Praxis ist. Bei strenger Fehlerberichterstattung hätte dies möglicherweise schneller erkannt werden können. Aus meiner ursprünglichen Frage – könnte dies ein Problem sein, wenn Passwörter aus der Datenbank abgerufen werden, oder wird PHP dem $-Zeichen entgehen?

    – ncatnow

    1. April 2010 um 2:59 Uhr

  • @ncatnow: Es kann kein Problem sein, da die Ersetzungen nur in doppelten Anführungszeichen (“String”) erfolgen. Wenn Sie eine Zeichenfolge aus der Datenbank lesen, wird sie intern von PHP gelesen, sodass Sie die Zeichenfolgen in doppelten Anführungszeichen nicht verwenden, um sie festzulegen (oder sogar die in einfachen Anführungszeichen). Stellen Sie sich vor, der Compiler ersetzt das ganze $-Zeug kurz bevor Setzen der Variable.

    – Thomas Bonini

    1. April 2010 um 3:01 Uhr

  • Es ist nur ein Problem für Zeichenfolgen, die direkt in Ihren Quellcode geschrieben werden, indem doppelte Anführungszeichen verwendet werden. Sie müssen physisch erscheinen "like $this" in einem .php Quelldatei. Zeichenfolgen aus der Datenbank, aus einer Datei, vom Benutzer usw. werden nicht interpoliert.

    – John Kugelmann

    1. April 2010 um 3:03 Uhr

  • Sie können das Dollarzeichen auch maskieren: "pas\$word".

    – Ben

    15. Oktober 2014 um 16:23 Uhr

PHP interpoliert die Variable $word in die Saite mypas$word, wie es das normale Verhalten für Zeichenfolgenliterale ist, die in doppelte Anführungszeichen gesetzt sind. Seit $word vermutlich undefiniert ist, ist die resultierende interpolierte Zeichenfolge mypas.

Die Lösung besteht darin, einfache Anführungszeichen zu verwenden. Zeichenfolgenliterale in einfachen Anführungszeichen werden keiner Variableninterpolation unterzogen.

1646309047 806 Dollarzeichen fur die Kennwortzeichenfolge die als Variable behandelt wird
Brianlmerritt

Die anderen Antworten funktionieren alle, bis einfache Anführungszeichen in das Passwort eingebettet sind.

Scheitern:

$_DB['password'] = 'my'pas$word';

Alternativen:

Wenn Sie keine anderen maskierten Zeichen haben, können Sie das $ mit maskieren \$z.B

$_DB['password'] = "my'pas\$word";

Oder es kann einfacher sein, dem einfachen Anführungszeichen zu entkommen, z

$_DB['password'] = 'my\'pas$word';

  • Grosses Dankeschön. Ich wusste nicht, dass wir Charakteren entkommen können.

    – Resa

    7. Oktober 2016 um 7:19 Uhr

Setzen Sie es einfach in eine Zeichenfolge in einfachen Anführungszeichen:

$_DB['password'] = 'mypas$word';

Die Zeichenfolge in doppelten Anführungszeichen interpoliert Variablen, Zeichenfolgen in einfachen Anführungszeichen jedoch nicht. Das wird also dein Problem lösen.

Verwenden Sie einfache Anführungszeichen

$_DB["password"] = 'mypas$word';

Dollarzeichen fur die Kennwortzeichenfolge die als Variable behandelt wird
Jeff beck

Verwenden Sie einfach einfache Anführungszeichen ‘ anstelle von ” und es wird nicht versucht, $word als Variable zu behandeln.

$_DB['password'] = 'mypas$word';

1646309048 243 Dollarzeichen fur die Kennwortzeichenfolge die als Variable behandelt wird
Brian Riehmann

Strings in Anführungszeichen mit dem doppelten Anführungszeichen werden für Variablen interpretiert. Strings in einfachen Anführungszeichen werden wörtlich interpretiert.

$a = "one";
$b = "$a";
echo $b . "\n";
$b = '$a';
echo $b . "\n";

Dies sollte ergeben:

one
$a

  • Und was ist mit dem Folgenden? $a enthält ein Dollarzeichen (String) ; $b=$a ? Ich habe das versucht, und leider wurde das Dollarzeichen nicht angezeigt.

    – ordentlich

    11. März 2012 um 14:01 Uhr


  • Wenn Sie die Zuweisung in einfache Anführungszeichen setzen, sollte sie angezeigt werden. $b = ‘$a’ setzt die Variable b auf den wörtlichen Text ‘$a’.

    – Brian Riehmann

    15. März 2012 um 13:48 Uhr

  • ich meine $a=’Dieses Buch kostet 148 $’; $b=’$a’ zeigt mir nicht den folgenden Text Dieses Buch kostet $148, aber wenn $b=$a, dann hat es versucht, die Variable $148 (?) anzuzeigen.

    – ordentlich

    19. März 2012 um 1:32 Uhr


923180cookie-checkDollarzeichen ($) für die Kennwortzeichenfolge, die als Variable behandelt wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy