Мой jQuery и PHP дают разные результаты на одном и том же? - PullRequest
2 голосов
/ 04 июня 2010

Раздражает проблема с онемением мозга.

У меня есть две функции для проверки длины строки (прежде всего, js one также усекается), вот что в Javascript:

$('textarea#itemdescription').keyup(function() {
    var charLength = $(this).val().length;
    // Displays count
    $('span#charCount').css({'color':'#666'});
    $('span#charCount').html(255 - charLength);

    if($(this).val().length >= 240){
        $('span#charCount').css({'color':'#FF0000'});
    }
    // Alerts when 250 characters is reached
    if($(this).val().length >= 255){
        $('span#charCount').css({'color':'#FF0000'});
        $('span#charCount').html('<strong>0</strong>');

        var text = $('textarea#itemdescription').val().substring(0,255)
        $('textarea#itemdescription').val(text);
    }
});

А вот мой PHP для двойной проверки:

if(strlen($_POST["description"])>255){
    echo "Description must be less than ".strlen($_POST["description"])." characters";
    exit();
}   

Я использую jQuery Ajax для публикации значений из текстовой области. Однако моя проверка php говорит, что strlen () длиннее, чем, по сути, говорит мой js. Так, например, если я набираю сплошную строку, и она говорит, что 0 или 3 символа осталось до 255. Затем я нажимаю сохранить, и php дает мне длину 261.

Есть идеи?

Это связано со специальными символами, размерами битов, которые js читает по-разному или пропускает? Или это связано с чем-то другим? Может быть, сегодня плохо! ...: P

Обновление: Я добавил var_dump($_POST['description']) чтобы увидеть, что было пройдено, и он возвращал слэши, например в чем дело? Я попытался добавить полоски (); безрезультатно ... откуда они?

ОБНОВЛЕНИЕ 2 - ПРОБЛЕМА РЕШЕНА :

В принципе, я только что понял, что на моем сервере включены магические кавычки ... grr Итак, я удалил косые черты перед обработкой. Немного раздражает, но это придется делать !!

Спасибо за вашу помощь!

Спасибо, Стефан

Ответы [ 5 ]

4 голосов
/ 04 июня 2010

Самый простой способ отладить это просто с помощью вашего PHP-скрипта, используя: var_dump($_POST['description']

Я предлагаю вам также использовать просмотреть исходный код в своем браузере, чтобы увидеть любой escape-код, специальные символы и т. Д. ...

1 голос
/ 04 июня 2010

Если вы используете кодировку UTF-8, PHP strlen () считает байты, а не символы. Если у вас есть что-то не-ASCII, это произойдет. Используйте mb_strlen (). Магические кавычки могут также добавить несколько символов.

1 голос
/ 04 июня 2010

Я вижу 2 вещи, которые могут быть причиной вашей проблемы.

  • сначала substring(0,255) возвращает 256 символов
  • во-вторых magic_quotes может быть включено в php.ini, PHP пытается выдать вам экранированные строки, но не делает это правильно все время

редактировать

doh не перечитал определение подстроки, проигнорируйте первое, но magic_quotes может быть на проверке, что

1 голос
/ 04 июня 2010

Я подозреваю, что несколько символов - это разрывы строк (вы говорите, что используете textarea), которые игнорируются при проверке с использованием javascript.

1 голос
/ 04 июня 2010

Было бы полезно, если бы вы опубликовали больше своего кода переднего плана, особенно там, где вы выполняете фактический POST. Тем не менее, вы уверены, что keyup вызывается каждый раз? Если пользователь просто вставляет текст в поле, вы подтвердили, что он по-прежнему называется?

Также имейте в виду, что JavaScript недостаточно хорош, чтобы гарантировать, что строка будет меньше заданной длины. Пользователь может отключить JavaScript, а опытный «пользователь» может отправить свой собственный запрос POST с более чем 255 символами.

...