当 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

因为这不是必需的。无论如何,当 posting 数据时,您在 #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 字符,在这种情况下,使用正则表达式是不可能的。