Знак плюс исчезает на стороне сервера? - PullRequest
1 голос
/ 06 февраля 2012

Я не могу сейчас смотреть на таблицы MySQL ... но я не думаю, что "+" делает это в таблицу.

Я проверил magic_guotes, и он включен. Однако magic_quotes не должен ничего делать со знаком «+», поскольку он относится только к экранированию символов, используемых базой данных.

Кроме того, я проверил свой regular expressions на клиенте и сервере (javascript и php), и нет ничего, что могло бы убрать знаки '+'.

Я также использую htmlentites(), но я не верю, что + является html-сущностью, и даже если бы это было так, это только сделало бы эту сущность более яркой, чем символ.

Это оставляет json_encode, но я смог передать символы обратно клиенту перед кодированием и все еще мог видеть, что не было знака "+".

Я проверил все 5 мест и не могу определить, куда идет мой знак + ... кажется, что база данных mysql возвращает пробел, где должен быть знак +.

Ajax Serialize

function ajax_serialize( form_name )
{
    var return_string='',  
        form_elements=document.forms[form_name].elements,
        iterator;  
    for(iterator = 0; iterator < form_elements.length; iterator++)
    {
        if( form_elements[iterator].name )
        {
            if( form_elements[iterator].type === 'checkbox' && form_elements[iterator].checked === false )
            {
                return_string += form_elements[iterator].name + "=0&";
            }
            else
            {
                return_string += form_elements[iterator].name + "=" + form_elements[iterator].value+"&";
            }
        }
    }
    return_string = return_string.slice( 0, -1 );
    return return_string;
}

Ajax Tweet

function interface_tweet()
{
    var form_name = 'tweet',
        response_div = form_name + '_response',
        tw_text = new Text(form_name),
        tw_message = new Message(response_div);

    if( Constant.VALIDATE_ON === 1 )
    {
        if( !tw_text.checkEmpty() ) 
        {
            tw_message.display('empty');
            return;
        }

        if( !tw_text.checkPattern('tweet') ) 
        {
            tw_message.display('tweet');
            return;
        }
    }

    Ajax.repeatUseAjaxObject( Constant.GATEWAY, ajax_serialize( 'tweet') + '&ajax_type=ControlTweet_add' , ajax_tweet ,'tweet_fill' );
    document.getElementById( 'tweet_input' ).value='';
    document.getElementById( 'tweet_response' ).innerHTML='';
}

1 Ответ

2 голосов
/ 06 февраля 2012

Это то, что вы должны иметь

return_string += encodeURIComponent(form_elements[iterator].name) + "=0&";

и

return_string += encodeURIComponent(form_elements[iterator].name) + "=" 
               + encodeURIComponent(form_elements[iterator].value)+"&";

если в вашем form_elements[iterator].name нет символов, которые должны быть закодированы, вы можете удалить encodeURIComponent для него.

...