Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Imasters,
Primeiramente obrigado pela atenção.
Estou com um problema para passar variáveis com acentuação por get com url amigavel.
Possuo um array com varias rotas cadastradas
private $urlpatterns = array(
'/'=>'Anuncio_destaques.class.php',
'/contato/enviar'=>'Contato_contato.action.php',
'/anuncie'=>'Contato_anuncie.class.php',
'/pesquisar/(?P<pesquisar>[a-zà-ú\s]+)'=>'Anuncio_pesquisar.class.php',
'/newsletter/assinar'=>'Newsletter_assinar.action.php',
);
Ao acessar uma URL o sistema redireciona para uma pagina aonde fará a validação da url com o seguinte método:
foreach($this->urlpatterns as $pcre=>$app) {
if(preg_match("@^{$pcre}$@",REQUEST_URI,$_GET)) {
$fileName = CONTROLLER_DIR . implode('/',explode('_',$app));
$className = current(explode(".",$app));
break;
}
}
Para parâmetros sem acentos o método funciona normal, agora com acentuação não funciona, ja testei com varias expressões regulares e não obtive sucesso.
O problema esta nessa validação aonde ele pega o Get e testa com a expressão regular do array
preg_match("@^{$pcre}$@",REQUEST_URI,$_GET)
(?P<pesquisar>[a-zà-ú\s]+)
Url desejada
http://localhost/Pesquisar/Educação
Espero que tenha conseguido expressar minha duvida.
Obrigado pela atenção.
Uma dúvida, se campo de URL não pode ter acentuação, como o o site da Wikipédia tem? É que também tenho esta dúvida e nunca encontrei na net uma solução.
Não falei que não existe acentos na na URL, falei que não se usa, por motivos de agilizar e facilitar a busca das paginas
Se você colocar o link sem acentuação, e der certo, blz, agora se o usuario alterar, tem que dar erro! não tem problema reconhecer somente sem acentuação.
o objetivo da URl Amigavel é facilitar que seu site seja encontrado pelo robots de busca, por este motivo, não se utiliza de acentos nem textos caixa alta (Maiusculos).
Hoje em dia caixa alta e acentuação é bem comum, e os buscadores sabe lidar muito bem com multi-byte.
O problema esta nessa validação aonde ele pega o Get e testa com a expressão regular do array
O problema é somente a pesquisa?
Invés de usar regex para validar esta url http://localhost/Pesquisar/Educação, usar strpos para verificar se existe na url a string /Pesquisar/
o restante ficaria na regex.
pelo que entendi você quer chamar a classe.
>
Olá
Mano, não se usa acentuação no campo de url, se vocÊ der uma navegada na net verá isso.
o objetivo da URl Amigavel é facilitar que seu site seja encontrado pelo robots de busca, por este motivo, não se utiliza de acentos nem textos caixa alta (Maiusculos).
um bom exeplo do que lhe falei vai ser a URL dessa postagem
Eu entendo que não se usa, mas como se trata de um campo de pesquisa eu queria fazer ela ser ativada pela URL e de forma transparente pro usuário, no caso se ele digitar Educação, ir com a acentuação pra ultima parte da URL que entraria como argumento
Se você colocar o link sem acentuação, e der certo, beleza, agora se o usuario alterar, tem que dar erro! não tem problema reconhecer somente sem acentuação.
Concordo com você, se eu deixar a rota de pesquisa definida não teria problema, mas a ultima parte da url entra como a variável que o usuário digitou oque seria impossível mapear tudo hehe.
>
Hoje em dia caixa alta e acentuação é bem comum, e os buscadores sabe lidar muito bem com multi-byte.
O problema é somente a pesquisa?
Invés de usar regex para validar esta url http://localhost/Pesquisar/Educação, usar strpos para verificar se existe na url a string /Pesquisar/
o restante ficaria na regex.
pelo que entendi você quer chamar a classe.
A classe já esta sendo chamada pela rota que esta definida no array, a parte Educação entraria como a variável que o usuário digitou para pesquisar, o que funciona perfeitamente quando é pesquisado algo sem acentuação. Agora quando colocamos acentos não funciona nessa expressão e em muitas outras parecidas que testei.
preg_match("@^{(?P<pesquisar>[a-zà-ú\s]+)}$@",REQUEST_URI,$_GET)
Olá
Mano, não se usa acentuação no campo de url, se vocÊ der uma navegada na net verá isso.
o objetivo da URl Amigavel é facilitar que seu site seja encontrado pelo robots de busca, por este motivo, não se utiliza de acentos nem textos caixa alta (Maiusculos).
um bom exeplo do que lhe falei vai ser a URL dessa postagem