Транслитерация имени пользователя и знак +
        Доброго вечера, возможно кто-то уже решал подобную проблему, буду благодарен за любые подсказки.
Есть плагин показывающий виртуальную страницу пользователя userPagePlugin:
пробовал вырезать знак плюс разными способами, пробовал urldecode и htmlentities. Запретить ввод символа + не желательно и уже есть такие пользователи, которые используют имя для логина с плюсом.
    
    
                                                        Есть плагин показывающий виртуальную страницу пользователя userPagePlugin:
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
if ($tmp[0] == 'users' && count($tmp) >= 2) {
	$section = 1262;
	$name = str_replace('.html', '', $tmp[1]);
	if ($user= $modx->getObject('modUser', array('username' => $name))) {
		$user_id = $user->get('id');
		$username = $user->get('username');
		$modx->setPlaceholder('username', $username);
		$modx->setPlaceholder('user_id', $user_id);
		$modx->setPlaceholders($user->Profile->toArray());
		$modx->sendForward($section);
	}
}Работает отлично, спасибо modx.pro именно здесь найдено решение. Но теперь нужно русские имена транслитерировать, а ещё важнее понять что делать если в имени пользователя есть знак +, так как в этом случае плагин уже не отрабатывает.пробовал вырезать знак плюс разными способами, пробовал urldecode и htmlentities. Запретить ввод символа + не желательно и уже есть такие пользователи, которые используют имя для логина с плюсом.
            
                Поблагодарить автора            
            
                 Отправить деньги            
        
        
            Комментарии: 7
$modx->setPlaceholder('username', str_replace("+","+",$username));или$modx->setPlaceholder('username', str_replace("+","+",$username));            
                Спасибо за идею, попробовал. 
Только это же плейсхолдер, до него дело не доходит, знак плюс мешает где-то выше в запросе страницы.
пока сделал по другому:
                    Только это же плейсхолдер, до него дело не доходит, знак плюс мешает где-то выше в запросе страницы.
пока сделал по другому:
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
if ($tmp[0] == 'users' && count($tmp) >= 2) {
	$section = 1262;
	$iduser = str_replace('.html', '', $tmp[1]);
    $user = $modx->getObject('modUser', array('id' => $iduser));
	$username = $user->get('username');
		$modx->setPlaceholder('username', $username);
		$modx->setPlaceholder('user_id', $iduser);
		$modx->setPlaceholders($user->Profile->toArray());
		$modx->sendForward($section);
}теперь у меня в алиас уходит id юзера и все ссылки на юзеров через id. В целом получилось удобно для моих целей, но если найдётся способ с транслитерацией, будет здорово.            
                Вот сейчас вызов у тебя правильный (сверка по ID)
                    $user = $modx->getObject('modUser', array('id' => $iduser));            
                Да. Только я не могу в адресную строку потом имя передать. Если сверка по id то в строке браузера будет .../users/777. Как сделать чтобы было .../users/Гена после плагина со сверкой по id не могу придумать. 
Дело в том, что первый плагин отрабатывает ссылку вида .../users/{$username}, а второй .../users/{$user_id}
                    Дело в том, что первый плагин отрабатывает ссылку вида .../users/{$username}, а второй .../users/{$user_id}
                Тогда тебе надо работать через rawurldecode()
php.net/manual/ru/function.rawurldecode.php
                    php.net/manual/ru/function.rawurldecode.php
                Тоже личные страницы есть. Проблему решаю просто, ссылка на профиль пользователя = username, который приводится в нижнем регистре и в котором запрещены все символы кроме букв и цифр. Этот момент отсекаю еще при регистрации, а сам username просто не вывожу для редактирования.            
                    
                Согласен, так проще, но мне нужно решить вопрос по-другому. Уже есть много пользователей с разными именами, не хочу заставлять их менять.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.