2

我试图有一个带有初始值的文本字段,如果你点击它,文本就会消失,如果你在输入任何内容之前点击它,初始值就会返回,就像雅虎答案和许多其他网站上的搜索框一样。

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 实体、转义撇号和使用转义引号,但无法使这种情况正常工作。到目前为止,我唯一的解决方案是用看起来像撇号的字符替换撇号。

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

4

3 回答 3

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";
于 2010-09-05T21:57:14.197 回答
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).'" />';
于 2010-09-05T22:01:49.790 回答
0

这个怎么样

echo '<input type="text" 
onblur="if (this.value == "") {this.value = "' . $cleaned . '";}" 
onfocus="if (this.value == "' . $cleaned . '") {this.value = "";}" 
value="' . $cleaned . '" />\n';
于 2010-09-05T21:53:44.370 回答