我有一个过早终止的字符串,因为'& q'(我猜是)在原始字符串中被转义。如果我想在PHP中保留原始字符串,我该如何处理?
原始字符串
'http://answers.onstartups.com/search?tab=active&q=fbi'
var_dump的结果
'["http://answers.onstartups.com/search?tab=active'
JS
var linksStr = $("#links").val();
var matches = JSON.stringify(linksStr.match(/\bhttps?:\/\/[^\s]+/gi));
$.ajax({
type: 'GET',
dataType: 'json',
cache: false,
data: 'matches=' + matches,
url: 'publishlinks/check_links',
success:
function(response) {
alert(response);
}
})
check_links
$urls = $this->input->get('matches');
var_dump($urls);
答案 0 :(得分:3)
您可以对JSON字符串进行编码:
data: 'matches=' + encodeURIComponent(matches),
你也可以这样写:
data: { matches: matches }
然后jQuery应该为你做编码步骤。
答案 1 :(得分:3)
从jQuery .val()返回的url是:
'http://answers.onstartups.com/search?tab=active&q=fbi'
.match()
正则表达式将返回一个数组:
new Array("http://answers.onstartups.com/search?tab=active&q=fbi")
哪个JSON.stringify()正确输出为:
["http://answers.onstartups.com/search?tab=active&q=fbi"]
但是,如果您将其作为原始 GET参数添加到此处:
data: 'matches=' + matches,
然后,URL中的enescaped &
将终止GET值。使用encodeURIComponent
答案 2 :(得分:2)
更改data: 'matches=' + matches,
收件人:data: {"matches": matches},
。
这样jQuery就会为你找出编码。否则,您必须使用encodeURIComponent()
对uri进行编码