我正在尝试使用具有初始值的文本字段,如果单击它,文本将消失,如果在输入任何内容之前单击输出,则初始值的返回方式与{{3}上的搜索框非常相似和许多其他网站。
echo "<input type=\"text\"
onblur=\"if (this.value == '') {this.value = '$cleaned';}\"
onfocus=\"if (this.value == '$cleaned') {this.value = '';}\"
value=\"$cleaned\" />\n";
我有一个php变量$cleaned
作为我的初始值。此代码有效,但清除变量中包含撇号的情况除外,如$cleaned = "FRIEND'S"
。然后代码将读取this.value = 'FRIEND'S'
并且FRIEND'S
中的撇号会提前结束字符串。
我尝试过使用html实体,转义撇号,并使用转义引号,但无法使用此案例。到目前为止,我唯一的解决方案是使用看起来像撇号的字符替换撇号。
有谁知道如何处理这种情况?
答案 0 :(得分:3)
使用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";
答案 1 :(得分:1)
首先生成纯JavaScript代码。您可以使用json_encode创建有效的JavaScript值,如下所示:
$js = 'if (this.value == '.json_encode($cleaned).') {this.value = "";}';
然后生成HTML。您可以使用htmlspecialchars对所有HTML属性进行编码,包括那些包含内联JavaScript代码的属性,如下所示:
echo '<input type="text" onblur="'.htmlspecialchars($js).'" />';
答案 2 :(得分:0)
这个怎么样
echo '<input type="text"
onblur="if (this.value == "") {this.value = "' . $cleaned . '";}"
onfocus="if (this.value == "' . $cleaned . '") {this.value = "";}"
value="' . $cleaned . '" />\n';