Ich schreibe einen JavaScript-Code, der eine mit PHP gerenderte Zeichenfolge verwendet. Wie kann ich einfache Anführungszeichen (und nur einfache Anführungszeichen) in meiner PHP-Zeichenfolge umgehen?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
addcslashes($mystringWithSingleQuotes, "'\"\r\n\\\t\0..\37")
json_encode()
, um eine gültige Javascript-Zeichenfolge abzurufen (und entfernen Sie Ihre äußeren einfachen Anführungszeichen), anstatt die Flucht selbst zu behandeln..html()
anstatt einfache Anführungszeichen einzugeben? Die PHP-Erweiterung wird unabhängig davon stattfinden. Dies wurde für alles getan, von Attributen für Elemente und Importe bis hin zu Variablenzuweisungen in Skriptblöcken.Antworten:
Ganz einfach:
echo str_replace('\'', '\\\'', $myString);
Ich würde jedoch die Verwendung von JSON und derjson_encode()
Funktion vorschlagen, da diese zuverlässiger ist (zitiert beispielsweise neue Zeilen):<?php $data = array('myString' => '...'); ?> <script> var phpData = <?php echo json_encode($data) ?>; alert(phpData.myString); </script>
quelle
str_replace("'","\\'", $string)
und Ähnliches sind falsch. Betrachten Sie die Zeichenfolge \ 'Sie wird durch \\' ersetzt, und dies führt zu einer Sicherheitsanfälligkeit durch Injektion. Verwenden Sie stattdessen json_encode, wie Crozin vorschlägt.JSON.parse('<?php echo json_encode($data);?>');
und es schlug fehl, weil die Daten ein einziges Anführungszeichen enthielten. Später erfuhr ich, dass hier keine Verwendung erforderlichJSON.parse
ist.Wenn Sie Zeichen mit einem entkommen möchten
\
, haben Sieaddcslashes()
. Wenn Sie beispielsweise nur einfache Anführungszeichen wie die Frage vermeiden möchten, können Sie Folgendes tun:echo addcslashes($value, "'");
Und wenn Sie entfliehen wollen
'
,"
,\
, undnul
(das Byte null), können Sie verwendenaddslashes()
:echo addslashes($value);
quelle
str_replace("'", "\'", $mystringWithSingleQuotes);
quelle
In einigen Fällen konvertiere ich es einfach in ENTITIES:
// i.e., $x= ABC\DEFGH'IJKL $x = str_ireplace("'", "'", $x); $x = str_ireplace("\\", "\", $x); $x = str_ireplace('"', """, $x);
Auf der HTML-Seite ist die visuelle Ausgabe dieselbe:
ABC\DEFGH'IJKL
Es ist jedoch in der Quelle bereinigt.
quelle
Verwenden Sie diese einfache Anweisung, um nur einfache Anführungszeichen zu ersetzen:
$string = str_replace("'", "\\'", $string);
quelle
Verwenden Sie die native Funktion
htmlspecialchars
. Es wird allen Sonderzeichen entkommen. Wenn Sie speziell aus einem Angebot entkommen möchten, verwenden Sie mitENT_COMPAT
oderENT_QUOTES
. Hier ist das Beispiel:$str = "Jane & 'Tarzan'"; echo htmlspecialchars($str, ENT_COMPAT); // Will only convert double quotes echo "<br>"; echo htmlspecialchars($str, ENT_QUOTES); // Converts double and single quotes echo "<br>"; echo htmlspecialchars($str, ENT_NOQUOTES); // Does not convert any quotes
Die Ausgabe wäre wie folgt:
Jane & 'Tarzan'<br> Jane & 'Tarzan'<br> Jane & 'Tarzan'
Lesen Sie mehr in der PHP htmlspecialchars () Funktion
quelle
Sie können die Funktion addcslashes verwenden, um dies folgendermaßen zu erledigen:
echo addcslashes($text, "'\\");
quelle
Nach langer Zeit mit diesem Problem zu kämpfen, denke ich, ich habe eine bessere Lösung gefunden.
Die Kombination zweier Funktionen ermöglicht es, eine Zeichenfolge zu maskieren, die als HTML verwendet werden soll.
Erstens, um doppelte Anführungszeichen zu vermeiden, wenn Sie die Zeichenfolge in einem JavaScript-Funktionsaufruf verwenden. und ein zweites, um dem einfachen Anführungszeichen zu entkommen und die einfachen Anführungszeichen zu vermeiden, die das Argument umgehen.
Lösung:
mysql_real_escape_string(htmlspecialchars($string))
Lösen:
quelle
Hier ist, wie ich es gemacht habe. Dumm, aber einfach.
$singlequote = "'"; $picturefile = getProductPicture($id); echo showPicture('.$singlequote.$picturefile.$singlequote.');
Ich habe an der Ausgabe von HTML gearbeitet, das JavaScript-Code heißt, um ein Bild anzuzeigen ...
quelle
Ich bin nicht sicher, was genau Sie mit Ihren Daten machen, aber Sie könnten immer versuchen:
$string = str_replace("'", "%27", $string);
Ich benutze dies immer dann, wenn Zeichenfolgen zur Speicherung an eine Datenbank gesendet werden.
% 27 ist die Codierung für das Zeichen 'und hilft auch, die Unterbrechung von GET-Anforderungen zu verhindern, wenn ein einzelnes
'
Zeichen in einer an Ihren Server gesendeten Zeichenfolge enthalten ist. Ich würde 'in JavaScript und PHP durch% 27 ersetzen, nur für den Fall, dass jemand versucht, einige Daten manuell an Ihre PHP-Funktion zu senden.Um es für Ihren Endbenutzer schöner zu machen, führen Sie einfach eine inverse Ersetzungsfunktion für alle Daten aus, die Sie von Ihrem Server zurückerhalten, und ersetzen Sie alle% 27-Teilzeichenfolgen durch
'
.Fröhliche Injektion vermeiden!
quelle
Ich habe die folgende Funktion geschrieben. Es ersetzt Folgendes:
Einfaches Anführungszeichen ['] mit einem Schrägstrich und einem einfachen Anführungszeichen [\'].
Backslash [\] mit zwei Backslashes [\\]
function escapePhpString($target) { $replacements = array( "'" => '\\\'', "\\" => '\\\\' ); return strtr($target, $replacements); }
Sie können es ändern, um Zeichenersetzungen im Array $ replace hinzuzufügen oder zu entfernen. Um beispielsweise \ r \ n zu ersetzen, wird es zu "\ r \ n" => "\ r \ n" und "\ n" => "\ n".
/** * With new line replacements too */ function escapePhpString($target) { $replacements = array( "'" => '\\\'', "\\" => '\\\\', "\r\n" => "\\r\\n", "\n" => "\\n" ); return strtr($target, $replacements); }
Das nette Merkmal von strtr ist, dass es lange Ersetzungen bevorzugt.
Beispiel: "Cool \ r \ nFeature" wird ausgeblendet, anstatt zu entkommen.
quelle