Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2012, 21:14   #1
Руслан Роккер
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 19
Стрелка Нестандартное поведение strlen()

Добрый день:
PHP код:
$login trim($login);
    
$testLogim strlen($login);
    echo(
$testLogim);
    if(
$testLogim or $testLogim 15){
        exit(
'Логин меньше трёх символов или больше 15. Чего не может быть...'); 
Почему то в коде функция strlen(), возвращает длину строки умноженную на 2, то есть если я отправил формой методом POST(может это важно?), логин:"Картинка"... То выполняется функция if()... То есть в $testLogim попадает не число 8, а число 16... нет конечно можно изменить пределы)
"if($testLogim < 6 or $testLogim > 30)"... но всё же как так?
я даже специально вывел echo($testLogim);... и показывает число ровно в два раза больше чем длина логина? Смотрел инфу сдесь: http://php.su/functions/?strlen ничего подозрительно не заметил(
Если помог... ставь плюсик
Руслан Роккер вне форума Ответить с цитированием
Старый 16.01.2012, 21:49   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Если вы используете многобайтовую кодировку UTF-8 - тогда вам нужна функция mb_strlen().
Andkorol вне форума Ответить с цитированием
Старый 20.01.2012, 20:22   #3
Руслан Роккер
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 19
Вопрос

непомогло(((( все равно выводит колличество в два раза большее чем то что ввел пользователь((((
PHP код:
<?php

if(empty($_POST['submit'])){
    die;
}
// если юзер зашёл на страницу просто так, без отправки формы - убиваем такого юзера

    // ПРОВЕРКА НА СУЩЕСТВОВАНИЕ ПЕРЕМЕННЫХ 
    
if (isset($_POST['name']) && isset($_POST['lastNameUser']) && isset($_POST['password']) && isset($_POST['mailUser'])&& isset($_POST['login'])){
            
$nameUser $_POST['name']; 
            
$secondNameUser $_POST['lastNameUser'];
            
$password $_POST['password'];
            
$mailUser $_POST['mailUser'];
            
$loginUser $_POST['login'];
    };
    
    
// УДАЛЯЕМ ПРОБЕЛЬНЫЕ СИМВОЛЫ
    
$nameUser trim($nameUser);
    
$secondNameUser trim($secondNameUser);   
    
$password trim($password);
    
$mailUser trim($mailUser);
    
$loginUser trim($loginUser);
    
    
    
// УДАЛЯЕМ ОБРАТНЫЕ СЛЕШИ И ТЕГИ HTML
    
$nameUser stripslashes($nameUser);
    
$nameUser htmlspecialchars($nameUser);
    
$secondNameUser stripslashes($secondNameUser);
    
$secondNameUser htmlspecialchars($secondNameUser);
    
$password stripslashes($password);
    
$password htmlspecialchars($password);
    
$mailUser stripslashes($mailUser);
    
$mailUser htmlspecialchars($mailUser);
    
$loginUser stripslashes($loginUser);
    
$loginUser htmlspecialchars($loginUser);
    
    
    
// ПРОВЕРКА НА СУЩЕСТВОВАНИЕ ПЕРЕМЕННОЙ И ЕЁ ДЛИНА 
    
if(empty($nameUser) || empty($secondNameUser) || empty($password) || empty($mailUser) || empty($loginUser))
    {
        die(
'Переменных не существует');
        
    } elseif(
            (
mb_strlen($nameUser) >= 16 || mb_strlen($nameUser) <= 2) ||
            (
mb_strlen($secondNameUser) >= 16 || mb_strlen($secondNameUser) <= 2) ||
            (
mb_strlen($password) >= 16 || mb_strlen($password) <= 2) ||
            (
mb_strlen($loginUser) >= 16 || mb_strlen($loginUser) <= 2)
            )
    {
        
$test mb_strlen($nameUser);
        echo (
$test);
        die(
'Неправильно заданы данные');
    };
    
    
    
// СОЕДИНЕНИЕ С БАЗОЙ
    
include ('blocks/connectInDatabase.php');
    
    
    
// ПОМЕЩАЕМ ЗАПРОС В ПЕРЕМЕННУЮ 
    
$mysqlQuery mysql_query("
    
        SELECT idUser
        FROM userRegistration
        WHERE loginUser='
$loginUser'
        
        "
,$connect);
    
    
$resultsId mysql_fetch_array($mysqlQuery);
    
    
    
// ПРОВЕРКА НА СУЩЕСТВОВАНИЕ ЛОГИНА, ЕСЛИ ЛОГИН ЕСТЬ ТО ВОЗВРАЩАЕМ ЮЗЕРА НА СТРАНИЦУ С РЕГИСТРАЦИЕЙ
    
if(isset($resultsId['idUser']))
    {
        echo 
'Такой логин уже существует, вернитесь и измените его!';
        die();
    };
    
    
//ШИФРУЕМ + РЕВЕРС ДЛЯ ПОВЫШЕНИЯ НАДЁЖНОСТИ
    
$password md5($password);         
    
$password strrev($password);
    
    echo 
'ОК';
    
?>
Если помог... ставь плюсик
Руслан Роккер вне форума Ответить с цитированием
Старый 20.01.2012, 20:38   #4
Руслан Роккер
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 19
Вопрос

Я понял!!!! функция strlen()/mb_strlen() возвращают неправильное значение только если строка которую они преобразую - на анлгицком... Но как это исправить?
Если помог... ставь плюсик
Руслан Роккер вне форума Ответить с цитированием
Старый 20.01.2012, 20:58   #5
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Кодировку то для mb надо выставить сначала
http://ru.php.net/manual/en/function...l-encoding.php
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 20.01.2012, 21:14   #6
Руслан Роккер
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 19
Вопрос

PHP код:
$test mb_strlen($nameUserutf8);
$test2 mb_strlen(utf8_decode($secondNameUser)); 
вот так получается.. а нельзя ли выставить это поумолчанию один раз.. а то напряжно везде корректировать)?
Если помог... ставь плюсик
Руслан Роккер вне форума Ответить с цитированием
Старый 21.01.2012, 11:54   #7
Руслан Роккер
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 19
Вопрос

И еще вопрос а где можно почитать что такое многобайтовые символы?
Если помог... ставь плюсик
Руслан Роккер вне форума Ответить с цитированием
Старый 21.01.2012, 17:35   #8
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Про кодировку utf-8 и php можно почитать на этом форуме, потому что такой вопрос задают каждую неделю по несколько раз, а почитать про mb можно по ссылке на оф. мануал, которую вам уже дали прямо в этой теме.
Cronos20 вне форума Ответить с цитированием
Старый 21.01.2012, 22:22   #9
Руслан Роккер
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 19
Вопрос

И всё же вопрос остаётся открытым: можно ли где то в одном файле прописать это? Например в php.ini
попробовал включить:
--enable-mbstring
но всё равно нужно указывать кодировку(
Если помог... ставь плюсик
Руслан Роккер вне форума Ответить с цитированием
Старый 21.01.2012, 22:31   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Руслан Роккер Посмотреть сообщение
а нельзя ли выставить это поумолчанию один раз..
можно ли где то в одном файле прописать это?
Что "это"..?
Если под "это" подразумевается кодировка для многобайтовых функций - то вам уже давали ссылку.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Word. Нестандартное многоуровневая нумерация alzhmu Microsoft Office Word 1 21.06.2011 19:53
Нестандартное задание чисел c++ bigboss1113 Помощь студентам 0 28.11.2010 21:37
Нестандартное закрашивание DBGrid Kisma БД в Delphi 4 16.02.2010 21:26
Нестандартное включение ПК Bat{CMD}_Men Операционные системы общие вопросы 1 24.08.2009 17:04
Нестандартное PopupMenu Crivel Помощь студентам 6 12.08.2008 19:32