поделитесь куском скрипта, чтобы вырезал ненужные символы, и обрезал слово которое превышает порядка 33 символов например. Я где-то видел такую функцию сдесь только год назад, а сейчас пробовал искать по запросу "вырезание ненужных символов" не выдало нужных результатов.
ну в принципе символы ненужно обрезать, я вот подумал, чтобы укоротить слово, если больше 33 символов.
еще столкнулся с проблемой помогите разобрать! начал работать с куки чтобы язык менять. 1. на всех страницах стоит этот код (для авторизации языка) PHP: session_start(); if (empty($_SESSION['langses']) or empty($_COOKIE["langcook"])) { $_SESSION['langses'] = 'russian.inc'; $varlang = $_SESSION['langses']; setcookie("langcook", $varlang, time()+604800); /* expire in 1 week */ } else if (isset($_SESSION['langses']) or empty($_COOKIE["langcook"])) { $_SESSION['langses'] = $_COOKIE["langcook"]; $varlang = $_SESSION['langses']; } 2. Отдельный файл, где с помощью GET меняем язык PHP: session_start(); if (htmlspecialchars($_GET[lang]) == "rus") { setcookie("langcook", ""); unset($_SESSION['langses']); $_SESSION['langses'] = 'russian.inc'; $varlang = $_SESSION['langses']; setcookie("langcook", $varlang, time()+604800); /* expire in 1 week */ } else if (htmlspecialchars($_GET[lang]) == "eng") { setcookie("langcook", ""); unset($_SESSION['langses']); $_SESSION['langses'] = 'english.inc'; $varlang = $_SESSION['langses']; setcookie("langcook", $varlang, time()+604800); /* expire in 1 week */ } else { echo "такого языка нет"; #header("Location: $_SERVER[HTTP_REFERER]"); } Язык меняется, но при закрытие броузера, все становится заново русский язык по умолчанию. Для этого поставил я куки, и всеравно не добился желаемого результат все работает словно куки я и не ставил! В чем может заключаться проблема?
может, но тут пишется The default value is the current directory that the cookie is being set in. я так понял по умолчанию это и весь сайт, а за пределы домена не куда куки не идут. т.е. ненужно ставить куки в определенную дерикторию т.к. они активны по всему сайта... или обязательно ставить "/" нужно? или может я что-то не правильно понял?
gkhelloworld Я тебе намекаю на вопрос - у тебя в адресах сайта точно никаких папок нет? Даже если они через mod_rewrite - они всё равно будут папками. Короче - попробуй поставить - если поможет, значит дело в этом.
gkhelloworld Проведи эксперимент. Сделай файлик, с вот таким кодом: PHP: <? print_r($_COOKIE); ?> Запусти свой скрипт, чтобы он установил куку. Потом закрой браузер, открой заново и немедленно запусти вот этот файлик. И посмотри - кука жива или нет. Если жива - тогда точно, у тебя где-то она убивается.
Строка 9: ...or empty($_COOKIE["langcook"])... Строка 11: $_SESSION['langses'] = $_COOKIE["langcook"]; Чего присваиваем, если оно пусто? Тем более условие в строке 9 всё равно не сработает и оно лишнее..
просто так, побрюзжать захотелось. gkhelloworld индексы в массивах берутся в кавычки ($_GET['lang']) с помощью isset() надо проверять существование передаваемой переменной htmlspecialchars здесь не нужно кука «убивается» установкой даты в прошлом PHP: <?php setcookie("langcook", ""); unset($_SESSION['langses']); ?> лишние телодвижения, всё равно же сразу после этого ставишь куку заново и запихиваешь переменную в сессию. Определи какие должны быть языки, запиши их в массив и отталкивайся от этого массива, а не строго прописанных в коде условий. PHP: <?php $generalLang = array('eng','rus'); if(isset($_GET['lang'])){ if(in_array(trim($_GET['lang']),$generalLang)) setcookie('langcook', $lang, time()+604800,'/'); else echo 'Такого языка нет!'; } else echo 'Язык не указан!'; ?> ну или не совсем вежливый по отношению к пользователям вариант. Определить какой из языков будет выдаваться если в $_GET['lang'] какая-нибудь ерунда PHP: <?php $generalLang = array('eng','rus'); $defaultLang = 'rus'; $lang = (isset($_GET['lang']) && in_array($_GET['lang'],$generalLang))?trim($_GET['lang']):$defaultLang; setcookie('langcook', $lang, time()+604800,'/'); ?>
маленько разобрался, а как же вытащить Accept-Language, а что интересно будет если на английском кто-то зайдет вот я зашел броузер на русском ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 eng, или enu?
я придумал это PHP: $getlang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $tolang = explode("-",$getlang); echo $tolang[0];
Я сделал так: страница авторизации, которая стоит на всех страницах PHP: <?php if (empty($_COOKIE["langcook"]) && empty($_SESSION["langses"])) { $getlang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $tolang = explode("-",$getlang); $lang = $tolang[0]; if(in_array(trim($_GET['lang']),$generalLang)) { $_SESSION["langses"] = $lang; setcookie('langcook', $lang, time()+604800,'/'); $varlang = $_SESSION["langses"]; } else { $_SESSION["langses"] = $deflang; setcookie('langcook', $deflang, time()+604800,'/'); $varlang = $_SESSION["langses"]; } } else { $varlang = $_SESSION["langses"]; } ?> 2. Страница где меняется язык PHP: <?php session_start(); include("cfg.php"); if(isset($_GET['lang'])) { $lang = $_GET[lang]; if(in_array(trim($_GET['lang']),$generalLang)) { setcookie('langcook', $lang, time()+604800,'/'); $_SESSION["langses"] = $lang; } else echo 'Такого языка нет!'; } else print_r ($_COOKIE["langcook"]); ?> Вроде бы работает. Все идет так. Броузер заходит, если видет RU язык включает его, если EN тогда включает английский, если видит не тот ни тот включает по дефолту русский, у кого есть возможность протестировать на других языках отпишитесь. Может я ошибку допустил и мне по дефолту выдаст ошибку.
хотя не правильно.. когда куки удаляю при первом же показе Ошибка, а патом выставляет в куки засчет сессии. Что-то я намудрил, если кто-то понимает, исправьте в коде ошибку. =(
1) что за глупости... достаточно PHP: $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; 2) PHP: <?php session_start(); include("cfg.php"); if(isset($_GET['lang'])) { $lang = $_GET[lang]; if(in_array(trim($_GET['lang']),$generalLang)) { setcookie('langcook', $lang, time()+604800,'/'); $_SESSION["langses"] = $lang; } else echo 'Такого языка нет!'; } else print_r ($_COOKIE["langcook"]); ?> У вас всё работает правильно. Кука выставляется не за счёт сессии, она выставляется скриптом верно. Просто вы выводите значение куки (строка 17), но в это время результат ещё не отправлен броузеру, и кука не установлена. Когда же в следующий раз скрипт считывает куку (опять же, до отправления информации броузеру) - он считывает в предыдущий раз записанную куку. Надеюсь, не сильно закрутил, и надеюсь, я сам правильно понял как оно работает)