当空格是发布数据php的最后一个字符时发出问题

时间:2015-06-30 06:12:22

标签: php jquery ajax encoding contenteditable

我试图允许我的流媒体应用的主持人使用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)));

2 个答案:

答案 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(纯文本)一样严格,并且可能包含一些外来字符,在这种情况下,使用正则表达式是不可能的。