我试图允许我的流媒体应用的主持人使用contenteditable,jquery和php直接在观看页面中修改剧集的数据。一切都很完美,除非场地最后有空格;
正如我发现的那样,请求被正确发送。但是最后一个空格是在服务器端使用两个字符大小,而不是使用php trim()
删除,所以它不再作为空格接收。我的所有数据,页面和服务器都编码为 utf-8 ,因此它不是一个编码问题。
使用base64编码,我发现这个字符是" Â
" (包括空格)。
我做错了什么吗?基本代码如下,您可以自己尝试:
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)));
答案 0 :(得分:1)
尝试删除:
$("#synopsys").html($("#synopsys").text()) //removing new lines
因为这不是必需的。无论如何,当您text()
数据时,您在#synopsys
上使用post
。
您可以使用trim()
删除所有前导和尾随空格。
synopsys: $("#synopsys").text().trim()
OR
您可以使用regex
删除所有空格字符(标签,换行符等)
synopsys: $("#synopsys").text().replace(/\s+/, ' ').trim()
答案 1 :(得分:0)
正如 @AnkitPise 所说,String.trim()
将删除所有不必在服务器端正常文本内的字符,所以这就是我想要的
另外,正如 @Tushar 所说,{{1}}在客户端解决了这个问题。没有空间,没有奇怪的焦点。
然而,即使我的问题解决了,有人知道它出现的原因吗?因为某些字段不能像synopsys(纯文本)一样严格,并且可能包含一些外来字符,在这种情况下,使用正则表达式是不可能的。