有没有一种方法可以在用户键入字符&
时而不是在提交表单后将其替换为and
?
当&
插入我们的数据库时,我们的搜索引擎无法正确解释&
,将其替换为返回错误搜索结果的&
(即不包括&
的结果)。
这是我们想要运行的字段:
<input type="text" name="project_title" id="project_title" value="<?php echo $project_title; ?>" size="60" class="btn_input2"/>
有没有办法替换字符&在PHP web表单中,当用户键入它时,而不是在提交表单后?
PHP在服务器上,它无法控制在任何情况下发生的任何事情,就像在客户端上一样。它从网络服务器发送原始文本,1亿吨热核设备爆炸,内容发送后PHP就再也不存在了。只剩下客户端收到的文件。要在客户端处理效果,您需要使用JavaScript。
要做到这一点,您可以选择您最喜欢的JavaScript库,并为"keyup"事件添加一个事件侦听器。将"与"替换为"answers",然后将替换文本放回框中。mugur发布了一个答案,告诉你如何做到这一点。
这在实践中是一个可怕的解决方案,因为你的用户会尖叫着要求血腥的正义,让他们摆脱如此糟糕的用户体验。你最终所做的是用他们不想要的东西替换输入文本。其他搜索工具都能做到这一点,为什么你的不能呢?你打了退格,然后呢?当你点击文本时,你可能会失去光标的位置。
不仅如此,你在治疗一种症状,而不是病因。看看你为什么这么做:
原因是当&被插入到我们的数据库中,我们的搜索引擎会弹出并用&然后返回不正确的结果(即不是包括&
不,你的数据库和搜索引擎不会做"翻出来"这样的事情。你不知道发生了什么,而是试图治疗症状,而不是了解原因并解决问题。你的症状治疗将在未来产生更多问题。不要这么做。
&
是一个HTML实体代码。每个"特殊"的角色都有一个。这意味着您的数据库还将>
编码为>
,以及其中带有重音的字符(如法语、德语或西班牙语文本)。所有这些结果都是"错误的"。
你没有显示任何代码,所以你没有得到任何代码。但这就是你的问题所在。
您的代码正在将原始文本转换为HTML实体代码,在适当的情况下,您正在搜索未编码的字符串。
选项1:修复原因
用HTML实体对搜索文本进行编码,使其与所有这些情况相匹配。将重音charecters与他们的非重音表亲进行匹配,因此搜索"français"可能会返回"fran"。
选项2:修复一个症状
在客户端或服务器端对"与"符号进行字符串替换,您的搜索将中断对所有其他编码的搜索。永远找不到诸如"Bob>Sally"之类的文本。永远不要找到"法语"。
在提交表单之前,您需要使用JavaScript根据用户键入的内容进行更改。这并不理想,因为JS可以关闭。
您最好在提交之后但在插入数据库之前"清除"与号。
一个简单的str_replace应该有效:
str_replace(' & ',' and ', $_POST['value']);
但正如其他人指出的那样,这不是一个好的解决方案。最好的解决方案是在"与"符号进入数据库时对其进行编码(这似乎刚刚发生),然后修改搜索脚本以允许这样做。
当他们用jquery完成表单时,可以这样做:
$('#input').change(function() { // edited conforming Icognito suggestion
var some_val = $('#input').val().replace('&', 'and');
$('#input').val( some_val );
});
编辑:工作示例(http://jsfiddle.net/4gXZW/13/)
JS:
$('.target').change(function() {
$('.target').val($('.target').val().replace('&', 'and'));
});
HTML:
<input class="target" type="text" value="Field 1" />
否则,您可以在insert
sql之前在PHP中执行此操作。
$to_insert = str_replace("&", "and", $_POST['your_variable']);