繁体   English   中英

从PHP生成的Javascript中转义撇号

[英]Escaping Apostrophes in Javascript Generated From PHP

我正在尝试使用一个带有初始值的文本字段,如果单击它,文本将消失,并且如果在输入任何内容之前单击退出,则初始值将返回,就像Yahoo答案和许多其他站点上的搜索框一样。

echo "<input type=\"text\" 
onblur=\"if (this.value == '') {this.value = '$cleaned';}\" 
onfocus=\"if (this.value == '$cleaned') {this.value = '';}\" 
value=\"$cleaned\" />\n";

我有一个PHP变量$cleaned作为我的初始值。 该代码有效,除了其中cleaned变量中带有撇号的情况(例如$cleaned = "FRIEND'S" 然后代码会读this.value = 'FRIEND'S'和在撇号FRIEND'S早结束的字符串。

我尝试使用html实体,转义撇号和使用转义引号,但无法使这种情况起作用。 到目前为止,我唯一的解决方案是用看起来像撇号的字符替换撇号。

有谁知道如何处理这种情况?

使用json_encode编码要在JavaScript中使用的数据,并使用htmlspecialchars编码要在HTML属性值中使用的字符串:

echo '<input type="text"
onblur="'.htmlspecialchars("if (this.value == '') {this.value = ".json_encode($cleaned).";}").'" 
onfocus="'.htmlspecialchars("if (this.value == ".json_encode($cleaned).") {this.value = '';}").'"
value="'.htmlspecialchars($cleaned).' />'."\n";

但是使用defaultValue当然更容易:

echo '<input type="text"
onblur="'.htmlspecialchars("if (this.value == '') {this.value = defaultValue;}").'" 
onfocus="'.htmlspecialchars("if (this.value == defaultValue) {this.value = '';}").'"
value="'.htmlspecialchars($cleaned).'" />'."\n";

首先生成纯JavaScript代码。 您可以使用json_encode创建有效的JavaScript值,如下所示:

$js = 'if (this.value == '.json_encode($cleaned).') {this.value = "";}';

然后生成HTML。 您可以使用htmlspecialchars编码所有HTML属性,包括那些包含内联JavaScript代码的属性,如下所示:

echo '<input type="text" onblur="'.htmlspecialchars($js).'" />';

这个怎么样

echo '<input type="text" 
onblur="if (this.value == "") {this.value = "' . $cleaned . '";}" 
onfocus="if (this.value == "' . $cleaned . '") {this.value = "";}" 
value="' . $cleaned . '" />\n';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM