Olá Raniere, consegui fazer de um jeito diferente, imaginei uma lógica observando o site Submarino.
Primeiro configurei o action do form:
<td><?= anchor("produtos/{$produto['id']}/". html_escape(converte($produto["nome"])),character_limiter(html_escape($produto["nome"]), 15))?></td>
Como viu o nome do produto tem que ser convertido para um modelo que irá se adaptar na Url, para isso criei um helper para isso:
<?php
function converte($nome)
{
$nome = str_replace('"','',$nome);
$nome = str_replace(" - ",'-',$nome);
$nome = str_replace("<",'',$nome);
$nome = str_replace(">",'',$nome);
$nome = str_replace("/",'',$nome);
$nome = str_replace("|",'',$nome);
$nome = str_replace("+",'',$nome);
$nome = str_replace("(",'',$nome);
$nome = str_replace(")",'',$nome);
$nome = str_replace("*",'',$nome);
$nome = str_replace("&",'',$nome);
$nome = str_replace("¨",'',$nome);
$nome = str_replace("%",'',$nome);
$nome = str_replace("#",'',$nome);
$nome = str_replace("@",'',$nome);
$nome = str_replace("!",'',$nome);
$nome = str_replace("&",'',$nome);
$nome = str_replace(", ",'-',$nome);
$nome = str_replace(",",'-',$nome);
$nome = str_replace(".",'-',$nome);
$nome = str_replace(";",'-',$nome);
$nome = str_replace(":",'-',$nome);
$nome = str_replace("=",'-',$nome);
$nome = str_replace("$",'-',$nome);
$nome = str_replace("§",'-',$nome);
$nome = str_replace("{",'-',$nome);
$nome = str_replace("}",'-',$nome);
$nome = str_replace("[",'-',$nome);
$nome = str_replace("]",'-',$nome);
$nome = str_replace("ª",'',$nome);
$nome = str_replace("º",'-',$nome);
$nome = str_replace("´",'',$nome);
$nome = str_replace("`",'',$nome);
$nome = str_replace("^",'',$nome);
$nome = str_replace("~",'',$nome);
$nome = str_replace("?",'',$nome);
$nome = str_replace("°",'',$nome);
$nome = str_replace("'",'',$nome);
$nome = str_replace('á','a',$nome);
$nome = str_replace('â','a',$nome);
$nome = str_replace('Á','a',$nome);
$nome = str_replace('Â','a',$nome);
$nome = str_replace('à','a',$nome);
$nome = str_replace('À','a',$nome);
$nome = str_replace('Ã','a',$nome);
$nome = str_replace('ã','a',$nome);
$nome = str_replace('è','e',$nome);
$nome = str_replace('é','e',$nome);
$nome = str_replace('ê','e',$nome);
$nome = str_replace('É','e',$nome);
$nome = str_replace('Ê','e',$nome);
$nome = str_replace('í','i',$nome);
$nome = str_replace('Î','i',$nome);
$nome = str_replace('î','i',$nome);
$nome = str_replace('Í','i',$nome);
$nome = str_replace('ó','o',$nome);
$nome = str_replace('õ','o',$nome);
$nome = str_replace('ô','o',$nome);
$nome = str_replace('Ô','o',$nome);
$nome = str_replace('Õ','o',$nome);
$nome = str_replace('Ó','o',$nome);
$nome = str_replace('ú','u',$nome);
$nome = str_replace('û','u',$nome);
$nome = str_replace('Û','u',$nome);
$nome = str_replace('Ú','u',$nome);
$nome = str_replace('ç','c',$nome);
$nome = str_replace('Ç','c',$nome);
$nome = str_replace('ñ','n',$nome);
$nome = str_replace('Ñ','n',$nome);
$nome = preg_replace("/ /", "-", $nome);
$nome = strtolower($nome);
return $nome;
}
?>
Depois alterei a rota que o CI deveria executar
$route['produtos/(:num)/:any'] = 'produtos/mostra/$1';
E por fim fiquei com um resultado assim:
http://localhost/projetos/mercado/produtos/16/bolsa-de-cosmeticos
Depois de "produtos" é informado o id, e depois do id eu envio o nome do produto tratado, mas ele é digamos que apenas para deixar a url mais amigável, apenas de "infeite".