За последние 24 часа нас посетили 17137 программистов и 1693 робота. Сейчас ищут 956 программистов ...

Поделитесь куском

Тема в разделе "PHP для новичков", создана пользователем gkhelloworld, 16 мар 2008.

  1. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    поделитесь куском скрипта, чтобы вырезал ненужные символы, и обрезал слово которое превышает порядка 33 символов например. Я где-то видел такую функцию сдесь только год назад, а сейчас пробовал искать по запросу

    "вырезание ненужных символов" не выдало нужных результатов.
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  3. Anonymous

    Anonymous Guest

    кто то показывал ф-ию, делающую фразу первыю из текста... не помню, кто.
     
  4. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    ну в принципе символы ненужно обрезать, я вот подумал, чтобы укоротить слово, если больше 33 символов.
     
  5. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    еще столкнулся с проблемой помогите разобрать! начал работать с куки чтобы язык менять.

    1. на всех страницах стоит этот код (для авторизации языка)

    PHP:
    1.  
    2. if (empty($_SESSION['langses']) or empty($_COOKIE["langcook"]))
    3. {
    4. $_SESSION['langses'] = 'russian.inc';
    5. $varlang = $_SESSION['langses'];
    6. setcookie("langcook", $varlang, time()+604800);  /* expire in 1 week */
    7. }
    8. else if (isset($_SESSION['langses']) or empty($_COOKIE["langcook"]))
    9. {
    10. $_SESSION['langses'] = $_COOKIE["langcook"];
    11. $varlang = $_SESSION['langses'];
    12. }
    2. Отдельный файл, где с помощью GET меняем язык

    PHP:
    1.  
    2. if (htmlspecialchars($_GET[lang]) == "rus")
    3. {
    4. setcookie("langcook", "");
    5. unset($_SESSION['langses']);
    6. $_SESSION['langses'] = 'russian.inc';
    7. $varlang = $_SESSION['langses'];
    8. setcookie("langcook", $varlang, time()+604800);  /* expire in 1 week */
    9. }
    10. else if (htmlspecialchars($_GET[lang]) == "eng")
    11. {
    12. setcookie("langcook", "");
    13. unset($_SESSION['langses']);
    14. $_SESSION['langses'] = 'english.inc';
    15. $varlang = $_SESSION['langses'];
    16. setcookie("langcook", $varlang, time()+604800);  /* expire in 1 week */
    17. }
    18. else
    19. {
    20. echo "такого языка нет";
    21. #header("Location: $_SERVER[HTTP_REFERER]");
    22. }
    Язык меняется, но при закрытие броузера, все становится заново русский язык по умолчанию.
    Для этого поставил я куки, и всеравно не добился желаемого результат все работает словно куки я и не ставил!
    В чем может заключаться проблема?
     
  6. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    еще хотел спросить как определить какой язык у пользователя, чтобы ставить по умолчанию.
     
  7. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Может быть, в в этом проблема:
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    gkhelloworld
    Можно смотреть по браузеру.
    $_SERVER["HTTP_USER_AGENT"]
     
  9. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    А ещё может быть, что у тебя в коде где-то кука обнуляется.
     
  10. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    может, но тут пишется The default value is the current directory that the cookie is being set in. я так понял по умолчанию это и весь сайт, а за пределы домена не куда куки не идут. т.е. ненужно ставить куки в определенную дерикторию т.к. они активны по всему сайта... или обязательно ставить "/" нужно?

    или может я что-то не правильно понял?
     
  11. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    gkhelloworld
    Я тебе намекаю на вопрос - у тебя в адресах сайта точно никаких папок нет? Даже если они через mod_rewrite - они всё равно будут папками.
    Короче - попробуй поставить - если поможет, значит дело в этом.
     
  12. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    я использую mod_rewrite каталоги у меня как папки
    тогда что поставить ?
     
  13. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    я паставил setcookie("langcook", $varlang, time()+604800, "/"); что-то не помогло!
     
  14. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Тогда ищи, где у тебя кука обнуляется.
     
  15. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    gkhelloworld
    Проведи эксперимент. Сделай файлик, с вот таким кодом:
    PHP:
    1. <?
    2. print_r($_COOKIE);
    3. ?>
    Запусти свой скрипт, чтобы он установил куку. Потом закрой браузер, открой заново и немедленно запусти вот этот файлик. И посмотри - кука жива или нет. Если жива - тогда точно, у тебя где-то она убивается.
     
  16. Anonymous

    Anonymous Guest

    заголовок Accept-Language
     
  17. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Строка 9:
    ...or empty($_COOKIE["langcook"])...
    Строка 11:
    $_SESSION['langses'] = $_COOKIE["langcook"];

    Чего присваиваем, если оно пусто?
    Тем более условие в строке 9 всё равно не сработает и оно лишнее..
     
  18. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    просто так, побрюзжать захотелось.
    gkhelloworld
    индексы в массивах берутся в кавычки ($_GET['lang'])
    с помощью isset() надо проверять существование передаваемой переменной
    htmlspecialchars здесь не нужно
    кука «убивается» установкой даты в прошлом
    PHP:
    1. <?php
    2. setcookie("langcook", "");
    3. unset($_SESSION['langses']);
    4. ?>
    лишние телодвижения, всё равно же сразу после этого ставишь куку заново и запихиваешь переменную в сессию.
    Определи какие должны быть языки, запиши их в массив и отталкивайся от этого массива, а не строго прописанных в коде условий.
    PHP:
    1. <?php
    2. $generalLang = array('eng','rus');
    3.  
    4. if(isset($_GET['lang'])){
    5.     if(in_array(trim($_GET['lang']),$generalLang))
    6.         setcookie('langcook', $lang, time()+604800,'/');
    7.     else
    8.         echo 'Такого языка нет!';
    9. }
    10. else
    11.     echo 'Язык не указан!';
    12. ?>
    ну или не совсем вежливый по отношению к пользователям вариант. Определить какой из языков будет выдаваться если в $_GET['lang'] какая-нибудь ерунда
    PHP:
    1. <?php
    2. $generalLang = array('eng','rus');
    3. $defaultLang = 'rus';
    4. $lang = (isset($_GET['lang']) && in_array($_GET['lang'],$generalLang))?trim($_GET['lang']):$defaultLang;
    5. setcookie('langcook', $lang, time()+604800,'/');
    6. ?>
     
  19. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    я ваще запутался что делать чтобы все работало :( :oops:
     
  20. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    сначала думать (много), а потом уже писать. А не наоборот…
     
  21. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    маленько разобрался, а как же вытащить Accept-Language, а что интересно будет если на английском кто-то зайдет
    вот я зашел броузер на русском
    ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
    eng, или enu?
     
  22. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    я придумал это
    PHP:
    1. $getlang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    2. $tolang = explode("-",$getlang);
    3. echo $tolang[0];
     
  23. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    Я сделал так:

    страница авторизации, которая стоит на всех страницах

    PHP:
    1.  
    2. <?php
    3. if (empty($_COOKIE["langcook"]) && empty($_SESSION["langses"]))
    4. {
    5. $getlang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    6. $tolang = explode("-",$getlang);
    7. $lang = $tolang[0];
    8. if(in_array(trim($_GET['lang']),$generalLang))
    9. {
    10. $_SESSION["langses"] = $lang;
    11. setcookie('langcook', $lang, time()+604800,'/');
    12. $varlang = $_SESSION["langses"];
    13. }
    14. else
    15. {
    16. $_SESSION["langses"] = $deflang;
    17. setcookie('langcook', $deflang, time()+604800,'/');
    18. $varlang = $_SESSION["langses"];
    19. }
    20. }
    21. else
    22. {
    23. $varlang = $_SESSION["langses"];
    24. }
    25. ?>
    26.  
    2. Страница где меняется язык

    PHP:
    1. <?php
    2. include("cfg.php");
    3.  
    4. if(isset($_GET['lang']))
    5. {
    6. $lang = $_GET[lang];
    7. if(in_array(trim($_GET['lang']),$generalLang))
    8. {
    9. setcookie('langcook', $lang, time()+604800,'/');
    10. $_SESSION["langses"] = $lang;
    11. }
    12. else
    13. echo 'Такого языка нет!';
    14. }
    15. else
    16. print_r ($_COOKIE["langcook"]);
    17. ?>
    Вроде бы работает.
    Все идет так. Броузер заходит, если видет RU язык включает его, если EN тогда включает английский, если видит не тот ни тот включает по дефолту русский, у кого есть возможность протестировать на других языках отпишитесь. Может я ошибку допустил и мне по дефолту выдаст ошибку.
     
  24. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    хотя не правильно.. когда куки удаляю при первом же показе Ошибка, а патом выставляет в куки засчет сессии.
    Что-то я намудрил, если кто-то понимает, исправьте в коде ошибку. =(
     
  25. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    1)

    что за глупости...

    достаточно
    PHP:
    1.  
    2. $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    3.  
    2)

    PHP:
    1.  
    2. <?php
    3.  include("cfg.php");
    4.  
    5.  if(isset($_GET['lang']))
    6.  {
    7.  $lang = $_GET[lang];
    8.  if(in_array(trim($_GET['lang']),$generalLang))
    9.  {
    10.  setcookie('langcook', $lang, time()+604800,'/');
    11.  $_SESSION["langses"] = $lang;
    12.  }
    13.  else
    14.  echo 'Такого языка нет!';
    15.  }
    16.  else
    17.  print_r ($_COOKIE["langcook"]);
    18.  ?>
    19.  

    У вас всё работает правильно. Кука выставляется не за счёт сессии, она выставляется скриптом верно. Просто вы выводите значение куки (строка 17), но в это время результат ещё не отправлен броузеру, и кука не установлена. Когда же в следующий раз скрипт считывает куку (опять же, до отправления информации броузеру) - он считывает в предыдущий раз записанную куку.
    Надеюсь, не сильно закрутил, и надеюсь, я сам правильно понял как оно работает)