当 space 是 post 数据 php 的最后一个字符时出现问题
Issue when space is the last character of a post data php
我正在尝试允许我的流应用程序的版主使用 contenteditable、jquery 和 php 直接在观看页面中修改剧集的数据。一切都完美无缺,除非字段末尾有 spaces;
正如我所发现的,请求已正确发送。但是最后一个 space 在服务器端占用了两个字符的大小,它不会使用 php trim()
删除,所以它不再作为 space 接收。我所有的数据、页面和服务器都被编码成utf-8,所以这不是真正的编码问题。
使用base64编码,我发现这个字符是“Â
”(包括space)。
我是不是做错了什么?基础代码如下,大家可以自己试试:
html:
<section>
<span id=kubi_synopsys>Some content and the space: </span>
</section>
Javascript:
$("#synopsys").keydown(function(e){
if(e.keyCode===13){//press enter
$("#synopsys").html($("#synopsys").text()) //removing new lines
//posting data
//#episode is a <data> tag containing the current episode's info
$.post("synopsys-set.php",{
series: $("#episode").data("series"),
season: $("#episode").data("season"),
episode: $("#episode").data("episode"),
synopsys: $("#synopsys").text()
},"json")
.success(function(data){
console.log("success",atob(data.response))
})
.error(function(){
console.log("error")
})
}
})
php:
<?php
//acquisition
$series = isset($_POST['series'])? (int)$_POST['series'] :0;
$season = isset($_POST['season'])? (int)$_POST['season'] :0;
$episode = isset($_POST['episode'])? $_POST['episode'] :0;
$version = isset($_POST['version'])? htmlspecialchars(trim($_POST['version'])) :'';
$synopsys = isset($_POST['synopsys'])? htmlspecialchars(trim($_POST['synopsys'])) :'';
header('Content-type: application/json');
echo json_encode(array('response'=> base64_encode($synopsys)));
尝试删除:
$("#synopsys").html($("#synopsys").text()) //removing new lines
因为这不是必需的。无论如何,当 post
ing 数据时,您在 #synopsys
上使用 text()
。
您可以使用 trim()
.
删除所有开头和结尾的 space
synopsys: $("#synopsys").text().trim()
或
您可以使用 regex
删除所有 space 个字符(制表符、换行符等)
synopsys: $("#synopsys").text().replace(/\s+/, ' ').trim()
正如 @AnkitPise 所说,preg_replace('/[^a-z0-9 .-]/', '', $string);
将删除服务器端正常文本中不需要的所有字符,所以这是我想要什么。
此外,正如@Tushar所说,String.trim()
在客户端解决了它。没有space,没有奇怪的字符。
但是,即使我的问题解决了,有谁知道为什么会出现?因为有些字段不能像 synopsys(纯文本)那样严格,并且可能包含一些 exotic 字符,在这种情况下,使用正则表达式是不可能的。
我正在尝试允许我的流应用程序的版主使用 contenteditable、jquery 和 php 直接在观看页面中修改剧集的数据。一切都完美无缺,除非字段末尾有 spaces;
正如我所发现的,请求已正确发送。但是最后一个 space 在服务器端占用了两个字符的大小,它不会使用 php trim()
删除,所以它不再作为 space 接收。我所有的数据、页面和服务器都被编码成utf-8,所以这不是真正的编码问题。
使用base64编码,我发现这个字符是“Â
”(包括space)。
我是不是做错了什么?基础代码如下,大家可以自己试试:
html:
<section>
<span id=kubi_synopsys>Some content and the space: </span>
</section>
Javascript:
$("#synopsys").keydown(function(e){
if(e.keyCode===13){//press enter
$("#synopsys").html($("#synopsys").text()) //removing new lines
//posting data
//#episode is a <data> tag containing the current episode's info
$.post("synopsys-set.php",{
series: $("#episode").data("series"),
season: $("#episode").data("season"),
episode: $("#episode").data("episode"),
synopsys: $("#synopsys").text()
},"json")
.success(function(data){
console.log("success",atob(data.response))
})
.error(function(){
console.log("error")
})
}
})
php:
<?php
//acquisition
$series = isset($_POST['series'])? (int)$_POST['series'] :0;
$season = isset($_POST['season'])? (int)$_POST['season'] :0;
$episode = isset($_POST['episode'])? $_POST['episode'] :0;
$version = isset($_POST['version'])? htmlspecialchars(trim($_POST['version'])) :'';
$synopsys = isset($_POST['synopsys'])? htmlspecialchars(trim($_POST['synopsys'])) :'';
header('Content-type: application/json');
echo json_encode(array('response'=> base64_encode($synopsys)));
尝试删除:
$("#synopsys").html($("#synopsys").text()) //removing new lines
因为这不是必需的。无论如何,当 post
ing 数据时,您在 #synopsys
上使用 text()
。
您可以使用 trim()
.
synopsys: $("#synopsys").text().trim()
或
您可以使用 regex
删除所有 space 个字符(制表符、换行符等)
synopsys: $("#synopsys").text().replace(/\s+/, ' ').trim()
正如 @AnkitPise 所说,preg_replace('/[^a-z0-9 .-]/', '', $string);
将删除服务器端正常文本中不需要的所有字符,所以这是我想要什么。
此外,正如@Tushar所说,String.trim()
在客户端解决了它。没有space,没有奇怪的字符。
但是,即使我的问题解决了,有谁知道为什么会出现?因为有些字段不能像 synopsys(纯文本)那样严格,并且可能包含一些 exotic 字符,在这种情况下,使用正则表达式是不可能的。