好的,我有这种情况。我有一个名为skills的表,带有一个简单的模式
id|name
It has records like
1|Cashier
2|Software Developer
3|C#
4|C# 3.0
5|C# Programming
在前端,我有一个文本框,下拉框进行ajax调用并在下拉框中填充ajax调用结果,如
$.getJSON(that.path + "?q=" + encodeURIComponent(keyword) , function(result){
if (result.length == 0) {
获取匹配结果。
如果我搜索"软件"answers"收银员"这样的词,我会得到正确的结果。但问题是,当我搜索任何带有"#"符号的技能时。
that.path
导致php函数
public function findSkills() {
print_r($_GET['q']);
如果我想搜索包含'#'的所有技能,我的ajax调用URL变成类似于
的东西http://somedomain.xyz/skills/findSkills?q=%23
然后当我打印$_GET['q']时,我没有打印任何东西。我该如何克服这个问题?
期望的SQL查询
SELECT * FROM skills WHERE (`name` LIKE '%#%') ORDER BY `id` ASC LIMIT 10
我已经读到,任何部分在URL后哈希(包括哈希)不发送到服务器。如果是这种情况,是否有其他方法来实现这将允许我使SQL查询获取记录与'#'?
任何帮助都将非常感激。如果需要,请让我知道我是否缺少任何其他数据/更多代码。我将相应更新问题
对于我来说,使用以下测试代码片段可以很好地工作:
if (isset($_GET['q'])) {
echo json_encode($_GET['q']);
exit;
}
?>
<form>
<input name="q" id="q">
<button>Submit</button>
</form>
<script src="http://code.jquery.com/jquery-1.11.3.js"></script>
<script>
$('button').click(function() {
$.getJSON(
'test.php?q=' + encodeURIComponent(q.value),
function(result) {
$('body').append($('<p>' + result + '</p>'));
}
);
return false;
});
</script>
值得一提的是,查看HTTP请求(使用某些工具,如Firebug)并输入例如C#
,它会报告:
/测试/stackOverflow/test.php吗? q = C % 23 HTTP/1.1
使用'test.php?q=' + q.value
代替'test.php?q=' + encodeURIComponent(q.value)
时报告:
/测试/stackOverflow/test.php吗? q = C HTTP/1.1
换句话说,虽然"URL中哈希(包括哈希)之后的任何部分都不会发送到服务器"是真的,但当使用encodeURIComponent()
时,此规则完全被绕过了。
所以它确认了,如果你像你展示的那样写应该工作。
您当前的问题可能是一个简单的其他错误。