有没有办法在用户输入PHP网页表单时将&
替换为and
,而不是在提交表单后?
当&
插入我们的数据库时,我们的搜索引擎不解释&
正确地将其替换为&
,返回错误的搜索结果(即不包含&
的结果1}})。
以下是我们要在此处运行的字段:
<input type="text" name="project_title" id="project_title" value="<?php echo $project_title; ?>" size="60" class="btn_input2"/>
答案 0 :(得分:4)
有没有办法取代角色&amp;使用和在PHP Web表单中,当用户键入它而不是在提交表单后?
PHP在服务器上,它无法控制在客户端的任何情况下发生的任何事情。它从Web服务器发送原始文本,100megaton热核设备爆炸,并且在内容发送后PHP不再存在。只是您客户端收到的文件仍然存在。要在客户端使用效果,您需要使用JavaScript。
为此,您可以选择自己喜欢的JavaScript库并为“keyup”事件添加事件监听器。用“和”替换&符号,然后将替换文本放回框中。 mugur发布了一个答案,告诉你如何做到这一点。
这在实践中是一个可怕的解决方案,因为您的用户会因为血腥的正义而尖叫,以便从如此糟糕的用户体验中提供这些解决方案。你最终做的是用他们不想要的东西替换输入文本。其他搜索工具这样做,为什么不能用你的?你击退退格,然后是什么?当您点击文本时,可能会丢失光标位置。
不仅如此,你正在治疗症状而不是病因。看看你为什么要这样做:
原因是&amp;插入我们的数据库,我们的搜索引擎翻转并替换为&amp;然后返回不正确的结果(即不包括&amp;的结果)。
不,你的数据库和搜索引擎没有“翻转”这样的东西。你不知道发生了什么,试着治疗症状而不是了解原因并加以解决。您的症状治愈将在未来产生 MORE 问题。不要这样做。
&
是HTML实体代码。每个“特殊”字符都有一个。这意味着您的数据库还将>
编码为>
以及带有重音符号的字符(例如法语,德语或西班牙语文本)。你得到所有这些的“错误”结果。
您没有显示任何代码,因此您没有获得任何代码。但这就是你的问题所在。
您的代码正在将原始文本转换为HTML实体代码(如果适用),您将搜索非编码字符串。
选项1:修复原因
使用HTML实体对搜索文本进行编码,使其与所有这些情况相匹配。将重音字符与非重音表兄弟匹配,以便搜索“francais”可能会返回“français”。
选项2:修复一个症状
在客户端或服务器端执行字符串替换&符号,对所有其他编码执行搜索中断。永远不要找到诸如“Bob&gt; Sally”之类的文本。永远不要找“français”。
答案 1 :(得分:2)
你可以这样做,因为他们用这样的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']);
答案 2 :(得分:2)
在提交表单之前,您需要使用JavaScript在用户输入时进行更改。由于JS可以关闭,因此不太理想。
在提交之后但在插入数据库之前,你会更好地“清理”&符号。
一个简单的str_replace应该可以工作:
str_replace(' & ',' and ', $_POST['value']);
但正如其他人所指出的那样,这不是一个好的解决方案。最好的解决方案是在&符号进入数据库时进行编码(这似乎刚刚发生),然后修改搜索脚本以允许这样做。