Aktueller Standort: Startseite> Neueste Artikel> Häufig gestellte Fragen und Lösungen für get_magic_quotes_gpc beim Umgang mit Multibyte -Charakter -Codierung

Häufig gestellte Fragen und Lösungen für get_magic_quotes_gpc beim Umgang mit Multibyte -Charakter -Codierung

gitbox 2025-09-18

In PHP ist GET_MAGIC_QUOTES_GPC eine Funktion, die überprüft, ob das Konfigurationselement von Magic_quotes_GPC aktiviert ist. Magic_quotes_GPC ist eine veraltete PHP -Einstellung, mit der einst zur Verhinderung von Daten aus der Formulareingabe, URL oder Cookies die SQL -Injektionsangriffe automatisch entgeht. Bei der Codierung von Multi-Byte-Zeichen (wie UTF-8) kann die Verarbeitung von GET_MAGIC_QUOTES_GPC jedoch einige unerwartete Probleme verursachen, insbesondere für nicht englische Zeichensätze.

1. Die Rolle von get_magic_quotes_gpc

get_magic_quotes_gpc überprüft PHPs Magic_quotes_GPC -Einstellungen von PHP und gibt True oder False zurück. Wenn Magic_quotes_GPC eingestellt ist, entgeht PHP automatisch Daten von $ _get , $ _post und $ _cookie . Dies bedeutet, dass alle einzelnen Zitate ( ' ), Double Quotes ( " ) und Backslash ( \ ) automatisch mit Backslash ( \\ ) entkommen werden.

2. Problem mit Multi-Byte-Charakter-Codierungsproblemen

Magic_quotes_GPC kann häufig zu unerwarteten Ergebnissen führen, wenn es sich um eine Multibyte-Charaktercodierung handelt (wie z. B. UTF-8). Die UTF-8-Codierung verwendet mehrere Bytes, um ein Zeichen darzustellen, während die Verarbeitung von Magic_quotes_GPC hauptsächlich auf Einzel-Byte-Zeichensätze abzielt, was möglicherweise fälschlicherweise Rückbrennungen zu Multi-Byte-Zeichen hinzufügt, wodurch die ursprüngliche Codierung der Zeichen gebrochen wird.

Zum Beispiel:

Angenommen, das Formulareingang enthält einen chinesischen Charakter "Hallo". Wenn Magic_quotes_GPC aktiviert ist, fügt er den Rückgang in der Mitte des Zeichen-Kodier-Byte-Streams auf einige Bytes ein, wodurch die Zeichenfolge "Sie \ OK" oder "Sie \ ok" werden, was verhindert, dass das Backend die ursprünglichen Zeichen korrekt entschlüsselt und möglicherweise sogar zu einem Code mit dem Gleiern geführt wird.

3. Warum macht PHP Magic_quotes_GPC ab?

Magic_quotes_GPC wurde in den frühen Tagen ausgelegt, um die SQL -Injektion zu verhindern. Mit der kontinuierlichen Entwicklung von PHP wird diese Konfiguration jedoch nicht mehr empfohlen, da sie viele Probleme mit sich bringt:

  • Es handelt sich nicht um Multibyte -Charakter -Codierung.

  • Es fügt zusätzliche Fluchtzeichen hinzu und veranlasst Entwickler, bei der Verarbeitung von Eingabedaten eine zusätzliche Inversion durchzuführen.

  • Bei modernen Datenbankabfragen kann die Verwendung vorbereiteter Anweisungen die SQL -Injektion effektiv verhindern, ohne sich auf Magic_quotes_GPC zu verlassen.

Daher wurde nach PHP 5.4.0 in PHP 7.0.0 vollständig aufgegeben und vollständig entfernt.

4. Lösungen beim Umgang mit Multibyte -Charakter -Codierung

4.1 Stellen Sie sicher, dass Sie Magic_quotes_GPC deaktivieren

Stellen Sie zunächst sicher, dass Magic_quotes_GPC deaktiviert ist. Es kann deaktiviert werden, indem die PHP -Konfigurationsdatei ( php.ini ) überprüft wird:

 <span><span><span class="hljs-attr">magic_quotes_gpc</span></span><span> = </span><span><span class="hljs-literal">Off</span></span><span>
</span></span>

Zusätzlich können Sie im PHP -Code Get_Magic_quotes_gpc () verwenden, um festzustellen, ob die Einstellung derzeit aktiviert ist. Wenn es aktiviert ist, können Sie entsiedelte Zeichen manuell entfernen:

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">get_magic_quotes_gpc</span></span><span>()) {
    </span><span><span class="hljs-variable">$_GET</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(</span><span><span class="hljs-string">'stripslashes'</span></span><span>, </span><span><span class="hljs-variable">$_GET</span></span><span>);
    </span><span><span class="hljs-variable">$_POST</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(</span><span><span class="hljs-string">'stripslashes'</span></span><span>, </span><span><span class="hljs-variable">$_POST</span></span><span>);
    </span><span><span class="hljs-variable">$_COOKIE</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(</span><span><span class="hljs-string">'stripslashes'</span></span><span>, </span><span><span class="hljs-variable">$_COOKIE</span></span><span>);
}
</span></span>

4.2 Verwenden Sie eine entsprechende Zeichenkodierung

Stellen Sie bei der Verarbeitung von Formulareingaben sicher, dass der Client und der Server dieselbe Zeichenkodierung verwenden und UTF-8 empfohlen wird. Dies kann durch Angeben des im HTML -Dokuments festgelegten Zeichens erfolgen:

 <span><span><span class="hljs-tag">&lt;<span class="hljs-name">meta</span></span></span><span> </span><span><span class="hljs-attr">charset</span></span><span>=</span><span><span class="hljs-string">"UTF-8"</span></span><span>&gt;
</span></span>

Verwenden Sie gleichzeitig die Funktion mb_convert_encoding in PHP, um die Konsistenz der Zeichencodierung zu gewährleisten:

 <span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'auto'</span></span><span>);
</span></span>

4.3 Verwenden Sie vorbereitete SQL -Anweisungen

Um SQL -Injektionsangriffe zu verhindern, sollten Sie immer vorbereitete SQL -Anweisungen verwenden, anstatt sich auf Magic_quotes_GPC zu verlassen, um automatisch zu entkommen. Diese Methode löst nicht nur das Codierungsproblem, sondern verhindert auch die SQL -Injektion.

Verwenden Sie PDO oder MySQLI, um vorbereitete Aussagen zu implementieren:

 <span><span><span class="hljs-comment">// verwendenPDO</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE username = :username"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':username'</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">PARAM_STR</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();

</span><span><span class="hljs-comment">// verwendenMySQLi</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE username = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

5. Zusammenfassung

Get_Magic_quotes_GPC und Magic_quotes_GPC werden in der modernen PHP -Entwicklung nicht mehr empfohlen. Für die Verarbeitung von Multi-Byte-Charaktercodierung sollte besondere Aufmerksamkeit auf die Konsistenz von Flucht- und Charaktercodierung gelegt werden, um die Richtigkeit und Sicherheit der Daten zu gewährleisten. Am besten können Sie Magic_quotes_GPC deaktivieren, moderne Methoden zur Verifizierungsverifizierung von Eingaben wie vorbereiteten SQL-Anweisungen verwenden und sicherstellen, dass ein einheitliches Charakter-Codieren (wie UTF-8) verwendet wird, um verstümmelte Zeichen und unnötige Fluchtprobleme zu vermeiden.