ivobarbosa Posted January 30, 2011 at 11:56 PM Report #366455 Posted January 30, 2011 at 11:56 PM Boa noite mestres do PHP, tenho aqui uma duvida, será que me podem ajudar? Tenho a função que está em baixo para destacar as palavras da pesquisa, só que esta função apenas sublinha as palavras que existem mesmo na pesquisa, resumindo o que pretendia fazer era uma função que não diferencia-se as palavras com acentos ou cedilhas. Por ex: se pesquisar "Amélia" ou "amelia" ou "Amelia", a função destacar na mesma a palavra. Alguém sabe como resolver isto?Já tentei várias alternativas como o Regex e não consegui. Grato a todos. function highlight($texto,$palavra){ return preg_replace("/($palavra)/is", "<u><strong>\\1</strong></u>", $texto); } Melhores Cumprimentos, Ivo Barbosa
pedrotuga Posted January 31, 2011 at 01:06 AM Report #366467 Posted January 31, 2011 at 01:06 AM Não estou a ver nenhuma forma trivial de fazer isto, mas acredito que haja. Uma solução possível é pegares na tua palavra e desdobrá-la nas possíveis palavras parecidas, por exemplo: constipação constipacão constipacao constipaçao pões isso para dentro de um array e percorres o array chamando a função que escreveste ali acima para cada elemento.
simonoop Posted January 31, 2011 at 12:15 PM Report #366514 Posted January 31, 2011 at 12:15 PM Tens um exemplo funcional disso na man page do preg_replace. Cuidado com o charset. function prepare_search_term($str,$delim='#') { $search = preg_quote($str,$delim); $search = preg_replace('/[aàáâãåäæ]/iu', '[aàáâãåäæ]', $search); $search = preg_replace('/[eèéêë]/iu', '[eèéêë]', $search); $search = preg_replace('/[iìíîï]/iu', '[iìíîï]', $search); $search = preg_replace('/[oòóôõöø]/iu', '[oòóôõöø]', $search); $search = preg_replace('/[uùúûü]/iu', '[uùúûü]', $search); // add more characters... return $search; } function highlight($searchtext, $text) { $search = prepare_search_term($searchtext); return preg_replace('#' . $search . '#iu', '<span style="background-color:red">$0</span>', $text); } $testtext = 'cafe cáfé càfè CAFE CÁFÉ CÀFÈ càfé cáfè CÀFÉ CÁFÈ'; echo highlight('cafe',$testtext) . '<br />'; echo highlight('cáfé',$testtext) . '<br />'; echo highlight('CAFE',$testtext) . '<br />'; echo highlight('CÀFÉ',$testtext) . '<br />';
ruimcosta Posted January 31, 2011 at 12:37 PM Report #366517 Posted January 31, 2011 at 12:37 PM Para fazer pesquisas em Mysql sem ligar aos acentos utilizo esta pérola que funciona 5*: $filtro = $_POST['txtpesq']; $sql = "SELECT * FROM conteudos WHERE titulo REGEXP '".pesquisa($filtro)."' or conteudo REGEXP '".pesquisa($filtro)."' ORDER BY dreg desc"; Qualquer coisa deste género deverá ser de qualquer forma validado. Abraços e beijinhos,Rui Costa
ivobarbosa Posted January 31, 2011 at 12:50 PM Author Report #366522 Posted January 31, 2011 at 12:50 PM Para fazer pesquisas em Mysql sem ligar aos acentos utilizo esta pérola que funciona 5*: $filtro = $_POST['txtpesq']; $sql = "SELECT * FROM conteudos WHERE titulo REGEXP '".pesquisa($filtro)."' or conteudo REGEXP '".pesquisa($filtro)."' ORDER BY dreg desc"; Qualquer coisa deste género deverá ser de qualquer forma validado. Com as pesquisas de mysql não tenho que me preocupar pois com a sintax like, obtenho sempre a palavra, mesmo escrevendo "amelia"; "Amelia"; "Amélia" ou "Amelia", o problema é mesmo no destacamento da palavra. Obrigado pela sugestão. Melhores Cumprimentos, Ivo Barbosa
ivobarbosa Posted January 31, 2011 at 12:51 PM Author Report #366523 Posted January 31, 2011 at 12:51 PM Tens um exemplo funcional disso na man page do preg_replace. Cuidado com o charset. function prepare_search_term($str,$delim='#') { $search = preg_quote($str,$delim); $search = preg_replace('/[aàáâãåäæ]/iu', '[aàáâãåäæ]', $search); $search = preg_replace('/[eèéêë]/iu', '[eèéêë]', $search); $search = preg_replace('/[iìíîï]/iu', '[iìíîï]', $search); $search = preg_replace('/[oòóôõöø]/iu', '[oòóôõöø]', $search); $search = preg_replace('/[uùúûü]/iu', '[uùúûü]', $search); // add more characters... return $search; } function highlight($searchtext, $text) { $search = prepare_search_term($searchtext); return preg_replace('#' . $search . '#iu', '<span style="background-color:red">$0</span>', $text); } $testtext = 'cafe cáfé càfè CAFE CÁFÉ CÀFÈ càfé cáfè CÀFÉ CÁFÈ'; echo highlight('cafe',$testtext) . '<br />'; echo highlight('cáfé',$testtext) . '<br />'; echo highlight('CAFE',$testtext) . '<br />'; echo highlight('CÀFÉ',$testtext) . '<br />'; Obrigado, vou testar e já digo se funcionou. Melhores Cumprimentos, Ivo Barbosa
ivobarbosa Posted January 31, 2011 at 01:03 PM Author Report #366526 Posted January 31, 2011 at 01:03 PM Tens um exemplo funcional disso na man page do preg_replace. Cuidado com o charset. function prepare_search_term($str,$delim='#') { $search = preg_quote($str,$delim); $search = preg_replace('/[aàáâãåäæ]/iu', '[aàáâãåäæ]', $search); $search = preg_replace('/[eèéêë]/iu', '[eèéêë]', $search); $search = preg_replace('/[iìíîï]/iu', '[iìíîï]', $search); $search = preg_replace('/[oòóôõöø]/iu', '[oòóôõöø]', $search); $search = preg_replace('/[uùúûü]/iu', '[uùúûü]', $search); // add more characters... return $search; } function highlight($searchtext, $text) { $search = prepare_search_term($searchtext); return preg_replace('#' . $search . '#iu', '<span style="background-color:red">$0</span>', $text); } $testtext = 'cafe cáfé càfè CAFE CÁFÉ CÀFÈ càfé cáfè CÀFÉ CÁFÈ'; echo highlight('cafe',$testtext) . '<br />'; echo highlight('cáfé',$testtext) . '<br />'; echo highlight('CAFE',$testtext) . '<br />'; echo highlight('CÀFÉ',$testtext) . '<br />'; A mim isto apenas me funciona com o charset "UTF-8" se mudar para "iso-8859-1" que é o caso que eu tenho, já não funciona 😛 Melhores Cumprimentos, Ivo Barbosa
brunoais Posted January 31, 2011 at 01:30 PM Report #366529 Posted January 31, 2011 at 01:30 PM A mim isto apenas me funciona com o charset "UTF-8" se mudar para "iso-8859-1" que é o caso que eu tenho, já não funciona 😛 Se usas caracteres que não fazem parte da norma que usas o que esperavas? experimenta: http://php.net/manual/en/function.utf8-encode.php "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
ivobarbosa Posted January 31, 2011 at 01:41 PM Author Report #366532 Posted January 31, 2011 at 01:41 PM Se usas caracteres que não fazem parte da norma que usas o que esperavas? experimenta: http://php.net/manual/en/function.utf8-encode.php experimentei com a função "iconv" e tb não me funcionou, ou não estou a colocar no sitio correcto. Melhores Cumprimentos, Ivo Barbosa
ivobarbosa Posted January 31, 2011 at 01:42 PM Author Report #366533 Posted January 31, 2011 at 01:42 PM Se usas caracteres que não fazem parte da norma que usas o que esperavas? experimenta: http://php.net/manual/en/function.utf8-encode.php Todas as páginas estão declaradas como "iso-8859-1" e a BD também. Melhores Cumprimentos, Ivo Barbosa
brunoais Posted January 31, 2011 at 03:31 PM Report #366557 Posted January 31, 2011 at 03:31 PM Provavelmente se passares tudo para utf8 fica a funcionar cmo deve ser. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
ivobarbosa Posted January 31, 2011 at 03:34 PM Author Report #366559 Posted January 31, 2011 at 03:34 PM Provavelmente se passares tudo para utf8 fica a funcionar cmo deve ser. Sim, não tenho duvidas que isso funcione, mas já tenho muitos campos na bd inseridos e iria ter que converter tudo, o que iria ser uma grande dor de cabeça. Melhores Cumprimentos, Ivo Barbosa
yoda Posted January 31, 2011 at 08:33 PM Report #366631 Posted January 31, 2011 at 08:33 PM Muda a base de dados para utf8. Não vejo vantagens em usar ISO, já que UTF apanha muito mais situações e ainda te dá mais possibilidades. Custa agora mas salva muitas dores de cabeça no futuro, acredita. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
ivobarbosa Posted January 31, 2011 at 10:49 PM Author Report #366657 Posted January 31, 2011 at 10:49 PM Muda a base de dados para utf8. Não vejo vantagens em usar ISO, já que UTF apanha muito mais situações e ainda te dá mais possibilidades. Custa agora mas salva muitas dores de cabeça no futuro, acredita. obrigado pela dica, mas por ja por ter tido com problemas com utf8 mudei para isso lol mas vou ver o que se pode fazer... Muda a base de dados para utf8. Não vejo vantagens em usar ISO, já que UTF apanha muito mais situações e ainda te dá mais possibilidades. Custa agora mas salva muitas dores de cabeça no futuro, acredita. Já agora numa bd MySql que utf8 usas? "UTF8_BIN"; "UTF8_Unicode_ci" ou nem delas ou o "Utf8_swedish_ci"? Obrigado Melhores Cumprimentos, Ivo Barbosa
brunoais Posted January 31, 2011 at 10:56 PM Report #366659 Posted January 31, 2011 at 10:56 PM Sim, não tenho duvidas que isso funcione, mas já tenho muitos campos na bd inseridos e iria ter que converter tudo, o que iria ser uma grande dor de cabeça. Se usas Mysql é só exportar tudo usando o phpmyadmin, usas um editor de texto para substituir o charset para o que queres, soltar a inserir tudo na DB. Problema resolvido (em 5 min!). obrigado pela dica, mas por ja por ter tido com problemas com utf8 mudei para isso lol mas vou ver o que se pode fazer... Já agora numa bd MySql que utf8 usas? "UTF8_BIN"; "UTF8_Unicode_ci" ou nem delas ou o "Utf8_swedish_ci"? Obrigado utf8_general_ci é o que eu uso pq acho ser o equilíbrio do mais versátil com o mais rápido. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
ivobarbosa Posted January 31, 2011 at 11:00 PM Author Report #366662 Posted January 31, 2011 at 11:00 PM Se usas Mysql é só exportar tudo usando o phpmyadmin, usas um editor de texto para substituir o charset para o que queres, soltar a inserir tudo na DB. Problema resolvido (em 5 min!). Quando tens mais de 500 registos na bd e tens que alterar a maior parte, já n é assim tão rápido como falas. Melhores Cumprimentos, Ivo Barbosa
ivobarbosa Posted February 1, 2011 at 12:13 AM Author Report #366670 Posted February 1, 2011 at 12:13 AM Ao colocar tudo em utf-8 páginas, e o colation da bd tambem em utf-8 e depois de alterar alguns registos, deparo-me que os acentos ficam deste genero "André Tiago Magalhães Ferreira" onde devia ser André Tiago Magalhães Ferreira, é normal acontecer isto? Ou estarei a fazer alguma coisa mal? Melhores Cumprimentos, Ivo Barbosa
yoda Posted February 1, 2011 at 12:39 AM Report #366673 Posted February 1, 2011 at 12:39 AM Já agora numa bd MySql que utf8 usas? "UTF8_BIN"; "UTF8_Unicode_ci" ou nem delas ou o "Utf8_swedish_ci"? Obrigado utf8_general_ci before you post, what have you tried? - http://filipematias.info sense, purpose, direction
yoda Posted February 1, 2011 at 12:40 AM Report #366674 Posted February 1, 2011 at 12:40 AM Ao colocar tudo em utf-8 páginas, e o colation da bd tambem em utf-8 e depois de alterar alguns registos, deparo-me que os acentos ficam deste genero "André Tiago Magalhães Ferreira" onde devia ser André Tiago Magalhães Ferreira, é normal acontecer isto? Ou estarei a fazer alguma coisa mal? Qual o encode da página? Also, o encode de cada campo não muda quando mudas o encode de uma tabela / BD, tem de ser mudado à mão. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
ivobarbosa Posted February 1, 2011 at 12:55 AM Author Report #366677 Posted February 1, 2011 at 12:55 AM Qual o encode da página? Also, o encode de cada campo não muda quando mudas o encode de uma tabela / BD, tem de ser mudado à mão. da página é utf-8 sim eu sei, eu mudei o encode de cada campo, como tabela e base de dados, entretanto já consegui resolver a questão colocando mysql_query("SET NAMES 'utf8'"); antes de cada mysql_query(); Obrigado Melhores Cumprimentos, Ivo Barbosa
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now