2012-04-05 3 views
0

Ich habe den folgenden Code:Übergeben Sie eine Zeichenfolge in eine JavaScript-Funktion alle in PHP - Wie richtig zu entkommen?

echo ' 
    <td>  
     <input type="button" name="delete" value="X" onclick="clearSelection(this.form, '.$type.');this.form.submit();" /> 
    </td>' 
; 

Das Problem ist, dass ich nicht eine Zeichenfolge an die clearSelection() Javascript-Funktion, weil $type Bedürfnisse in Klammern sein passieren kann.

Ich versuchte es mit Backslash, u0222, mehrere Zitate und so weiter, aber nichts brachte mich zur Lösung.

Lösung:

$type = json_escape_string($type); 
$raw_text = "clearSelection(this.form, $type); this.form.submit();"; 
$escaped_text = htmlspecialchars($raw_text); 
echo '<td><input type="button" name="delete" value="X" onclick="'.$escaped_text.'" /></td>'; 

function json_escape_string($str){ 
    $str = strtr($str, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/')); 
    return "'".$str."'"; 
} 

Antwort

3

Sie müssen es entkommen zuerst:

$escaped_text = HtmlSpecialChars(json_encode($raw_text)); 

json_encode() verwandelt es in eine gültige Zeichenfolge JS, dann HtmlSpecialChars() entkommt sie für die Verwendung in einem HTML-Attribut.

Wenn Sie eine alte Version von PHP ohne json_encode() haben, diese stattdessen zu verwenden:

$escaped_text = HtmlSpecialChars(json_escape_string($raw_text)); 

function json_escape_string($str){ 
    $str = strtr($str, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/')); 
    return "'".$str."'"; 
} 

Für Ihre besonderen Variablen:

$escaped_type = HtmlSpecialChars(json_escape_string($type)); 
echo '<td><input type="button" name="delete" value="X" onclick="clearSelection(this.form, '.$escaped_type.'); this.form.submit();" /></td>'; 
+0

Was ist, wenn 'json_encode()' ist nicht verfügbar? 'Aufruf zu undefinierter Funktion json_encode()'. PHP v. 5.2.9. OK, es scheint, dass es ohne 'json_encode()' funktionieren würde. – testing

+0

Aktualisierte Antwort mit einer alternativen Funktion – Cal

+0

Wenn ich Ihre Funktion verwende, bekomme ich '' clearSelection (this.form, \ 'products \'); this.form.submit(); ''im onclick-Attribut (' onlick = "" '). Und das scheint nicht zu funktionieren. – testing

Verwandte Themen