Commit b88f6308bdfd6adf6b5422a5266c24a49670dc13
1 parent
9c3ce7da
Exists in
master
Correção nas funções de busca para corrigir problemas com acentuação e projeção
Showing
1 changed file
with
156 additions
and
57 deletions
Show diff stats
classesphp/classe_atributos.php
@@ -705,28 +705,31 @@ class Atributos | @@ -705,28 +705,31 @@ class Atributos | ||
705 | if ($filtro != ""){ | 705 | if ($filtro != ""){ |
706 | $l->setfilter(""); | 706 | $l->setfilter(""); |
707 | } | 707 | } |
708 | - $b = "ÁÃÕÓÔáãâàóõôòúûíêéç"; | ||
709 | - $trocas = "AAOOOaaaaoooouuieecAAOOOaaaaoooouuieecAAOOOaaaaoooouuieec"; | ||
710 | - $buscas = b.(html_entity_decode($b,ENT_NOQUOTES,'UTF8')).(html_entity_decode($b,ENT_NOQUOTES,'ISO8859-1')); | ||
711 | $sopen = $l->open(); | 708 | $sopen = $l->open(); |
712 | if($sopen == MS_FAILURE){ | 709 | if($sopen == MS_FAILURE){ |
713 | return "erro"; | 710 | return "erro"; |
714 | } | 711 | } |
712 | + $ret = $this->mapa->extent; | ||
713 | + /* | ||
715 | $prjMapa = $this->mapa->getProjection(); | 714 | $prjMapa = $this->mapa->getProjection(); |
716 | $prjTema = $l->getProjection(); | 715 | $prjTema = $l->getProjection(); |
717 | - $ret = $this->mapa->extent; | ||
718 | - if (($prjTema != "") && ($prjMapa != $prjTema)) { | 716 | + if ($prjTema != ""){ |
719 | $projInObj = ms_newprojectionobj($prjTema); | 717 | $projInObj = ms_newprojectionobj($prjTema); |
720 | $projOutObj = ms_newprojectionobj($prjMapa); | 718 | $projOutObj = ms_newprojectionobj($prjMapa); |
719 | + } | ||
720 | + */ | ||
721 | + /* | ||
722 | + if (($prjTema != "") && ($prjMapa != $prjTema)) { | ||
721 | $status = $ret->project($projInObj, $projOutObj); | 723 | $status = $ret->project($projInObj, $projOutObj); |
722 | if($status !== MS_SUCCESS){ | 724 | if($status !== MS_SUCCESS){ |
723 | $ret = $this->mapa->extent; | 725 | $ret = $this->mapa->extent; |
724 | } | 726 | } |
725 | } | 727 | } |
726 | - | 728 | + */ |
727 | $fr = array(); | 729 | $fr = array(); |
728 | if (@$l->queryByrect($ret) == MS_SUCCESS){ | 730 | if (@$l->queryByrect($ret) == MS_SUCCESS){ |
729 | $res_count = $l->getNumresults(); | 731 | $res_count = $l->getNumresults(); |
732 | + $palavra = $this->remove_accents(strtolower($palavra)); | ||
730 | for ($i = 0; $i < $res_count; ++$i) { | 733 | for ($i = 0; $i < $res_count; ++$i) { |
731 | $valitem = array(); | 734 | $valitem = array(); |
732 | if($this->v == 6){ | 735 | if($this->v == 6){ |
@@ -742,8 +745,10 @@ class Atributos | @@ -742,8 +745,10 @@ class Atributos | ||
742 | $r = array(); | 745 | $r = array(); |
743 | foreach ($items as $item){ | 746 | foreach ($items as $item){ |
744 | $v = trim($shape->values[$item]); | 747 | $v = trim($shape->values[$item]); |
748 | + $nv = $this->remove_accents(strtolower($v)); | ||
749 | + //echo $v." - ".$nv."<br>"; | ||
745 | if ($tipo == "exata"){ | 750 | if ($tipo == "exata"){ |
746 | - if ($v == $palavra || (strtr($v,$buscas,$trocas) == strtr($palavra,$buscas,$trocas))) | 751 | + if ($nv == $palavra) |
747 | { | 752 | { |
748 | if($convC == true) | 753 | if($convC == true) |
749 | { | 754 | { |
@@ -754,7 +759,7 @@ class Atributos | @@ -754,7 +759,7 @@ class Atributos | ||
754 | } | 759 | } |
755 | } | 760 | } |
756 | else{ | 761 | else{ |
757 | - if (strtolower($v) == strtolower($palavra) || (stristr(strtr(strtolower($v),$buscas,$trocas),strtr(strtolower($palavra),$buscas,$trocas)))){ | 762 | + if (stristr($nv,$palavra)){ |
758 | if($convC == true){ | 763 | if($convC == true){ |
759 | $v = $this->converte($v); | 764 | $v = $this->converte($v); |
760 | } | 765 | } |
@@ -765,9 +770,11 @@ class Atributos | @@ -765,9 +770,11 @@ class Atributos | ||
765 | } | 770 | } |
766 | if ($encontrado == "sim"){ | 771 | if ($encontrado == "sim"){ |
767 | $ret = $this->extensaoShape($shape,$l); | 772 | $ret = $this->extensaoShape($shape,$l); |
773 | + /* | ||
768 | if (($prjTema != "") && ($prjMapa != $prjTema)){ | 774 | if (($prjTema != "") && ($prjMapa != $prjTema)){ |
769 | $ret->project($projInObj, $projOutObj); | 775 | $ret->project($projInObj, $projOutObj); |
770 | } | 776 | } |
777 | + */ | ||
771 | $novoreg["box"] = $ret; | 778 | $novoreg["box"] = $ret; |
772 | $novoreg["valores"] = $r; | 779 | $novoreg["valores"] = $r; |
773 | $encontrado = "nao"; | 780 | $encontrado = "nao"; |
@@ -776,55 +783,6 @@ class Atributos | @@ -776,55 +783,6 @@ class Atributos | ||
776 | } | 783 | } |
777 | $resultado[] = array("tema"=>$tema,"resultado"=>$fr); | 784 | $resultado[] = array("tema"=>$tema,"resultado"=>$fr); |
778 | } | 785 | } |
779 | - /* | ||
780 | - $teste = $l->whichShapes($ret); | ||
781 | - if($teste){ | ||
782 | - $fr = array(); | ||
783 | - while ($shape = $l->nextShape()) | ||
784 | - { | ||
785 | - $novoreg = array(); | ||
786 | - $r = array(); | ||
787 | - foreach ($items as $item) | ||
788 | - { | ||
789 | - $v = trim($shape->values[$item]); | ||
790 | - echo $v; | ||
791 | - if ($tipo == "exata") | ||
792 | - { | ||
793 | - if (strtr($v,$buscas,$trocas) == strtr($palavra,$buscas,$trocas)) | ||
794 | - { | ||
795 | - if($convC == true) | ||
796 | - {$v = $this->converte($v);} | ||
797 | - $r[] = array("item" => $item,"valor" => $v); | ||
798 | - $encontrado = "sim"; | ||
799 | - } | ||
800 | - } | ||
801 | - else | ||
802 | - { | ||
803 | - | ||
804 | - if (stristr(strtr($v,$buscas,$trocas),strtr($palavra,$buscas,$trocas))) | ||
805 | - { | ||
806 | - if($convC == true) | ||
807 | - {$v = $this->converte($v);} | ||
808 | - $r[] = array("item" => $item,"valor" => $v); | ||
809 | - $encontrado = "sim"; | ||
810 | - } | ||
811 | - } | ||
812 | - } | ||
813 | - if ($encontrado == "sim") | ||
814 | - { | ||
815 | - $ret = $this->extensaoShape($shape,$l); | ||
816 | - if (($prjTema != "") && ($prjMapa != $prjTema)) | ||
817 | - {$ret->project($projInObj, $projOutObj);} | ||
818 | - $novoreg["box"] = $ret; | ||
819 | - $novoreg["valores"] = $r; | ||
820 | - $encontrado = "nao"; | ||
821 | - $fr[] = $novoreg; | ||
822 | - } | ||
823 | - } | ||
824 | - $resultado[] = array("tema"=>$tema,"resultado"=>$fr); | ||
825 | - $l->close(); | ||
826 | - } | ||
827 | - */ | ||
828 | } | 786 | } |
829 | return($resultado); | 787 | return($resultado); |
830 | } | 788 | } |
@@ -2474,5 +2432,146 @@ class Atributos | @@ -2474,5 +2432,146 @@ class Atributos | ||
2474 | } | 2432 | } |
2475 | return $texto; | 2433 | return $texto; |
2476 | } | 2434 | } |
2435 | + function remove_accents($string) { | ||
2436 | + if (!preg_match('/[\x80-\xff]/', $string)) | ||
2437 | + return $string; | ||
2438 | + if ($this->seems_utf8($string)) { | ||
2439 | + $chars = array( | ||
2440 | + // Decompositions for Latin-1 Supplement | ||
2441 | + chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', | ||
2442 | + chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', | ||
2443 | + chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', | ||
2444 | + chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', | ||
2445 | + chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', | ||
2446 | + chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', | ||
2447 | + chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', | ||
2448 | + chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', | ||
2449 | + chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', | ||
2450 | + chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', | ||
2451 | + chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', | ||
2452 | + chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', | ||
2453 | + chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', | ||
2454 | + chr(195).chr(159) => 's', chr(195).chr(160) => 'a', | ||
2455 | + chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', | ||
2456 | + chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', | ||
2457 | + chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', | ||
2458 | + chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', | ||
2459 | + chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', | ||
2460 | + chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', | ||
2461 | + chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', | ||
2462 | + chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', | ||
2463 | + chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', | ||
2464 | + chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', | ||
2465 | + chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', | ||
2466 | + chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', | ||
2467 | + chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', | ||
2468 | + chr(195).chr(191) => 'y', | ||
2469 | + // Decompositions for Latin Extended-A | ||
2470 | + chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', | ||
2471 | + chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', | ||
2472 | + chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', | ||
2473 | + chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', | ||
2474 | + chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', | ||
2475 | + chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', | ||
2476 | + chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', | ||
2477 | + chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', | ||
2478 | + chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', | ||
2479 | + chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', | ||
2480 | + chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', | ||
2481 | + chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', | ||
2482 | + chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', | ||
2483 | + chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', | ||
2484 | + chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', | ||
2485 | + chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', | ||
2486 | + chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', | ||
2487 | + chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', | ||
2488 | + chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', | ||
2489 | + chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', | ||
2490 | + chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', | ||
2491 | + chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', | ||
2492 | + chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', | ||
2493 | + chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', | ||
2494 | + chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', | ||
2495 | + chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', | ||
2496 | + chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', | ||
2497 | + chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', | ||
2498 | + chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', | ||
2499 | + chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', | ||
2500 | + chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', | ||
2501 | + chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', | ||
2502 | + chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', | ||
2503 | + chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', | ||
2504 | + chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', | ||
2505 | + chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', | ||
2506 | + chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', | ||
2507 | + chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', | ||
2508 | + chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', | ||
2509 | + chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', | ||
2510 | + chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', | ||
2511 | + chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', | ||
2512 | + chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', | ||
2513 | + chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', | ||
2514 | + chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', | ||
2515 | + chr(197).chr(154) => 'S',chr(197).chr(155) => 's', | ||
2516 | + chr(197).chr(156) => 'S',chr(197).chr(157) => 's', | ||
2517 | + chr(197).chr(158) => 'S',chr(197).chr(159) => 's', | ||
2518 | + chr(197).chr(160) => 'S', chr(197).chr(161) => 's', | ||
2519 | + chr(197).chr(162) => 'T', chr(197).chr(163) => 't', | ||
2520 | + chr(197).chr(164) => 'T', chr(197).chr(165) => 't', | ||
2521 | + chr(197).chr(166) => 'T', chr(197).chr(167) => 't', | ||
2522 | + chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', | ||
2523 | + chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', | ||
2524 | + chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', | ||
2525 | + chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', | ||
2526 | + chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', | ||
2527 | + chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', | ||
2528 | + chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', | ||
2529 | + chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', | ||
2530 | + chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', | ||
2531 | + chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', | ||
2532 | + chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', | ||
2533 | + chr(197).chr(190) => 'z', chr(197).chr(191) => 's', | ||
2534 | + // Euro Sign | ||
2535 | + chr(226).chr(130).chr(172) => 'E', | ||
2536 | + // GBP (Pound) Sign | ||
2537 | + chr(194).chr(163) => ''); | ||
2538 | + $string = strtr($string, $chars); | ||
2539 | + } else { | ||
2540 | + // Assume ISO-8859-1 if not UTF-8 | ||
2541 | + $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) | ||
2542 | + .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) | ||
2543 | + .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) | ||
2544 | + .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) | ||
2545 | + .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) | ||
2546 | + .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) | ||
2547 | + .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) | ||
2548 | + .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) | ||
2549 | + .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) | ||
2550 | + .chr(252).chr(253).chr(255); | ||
2551 | + $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; | ||
2552 | + $string = strtr($string, $chars['in'], $chars['out']); | ||
2553 | + $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); | ||
2554 | + $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); | ||
2555 | + $string = str_replace($double_chars['in'], $double_chars['out'], $string); | ||
2556 | + } | ||
2557 | + return $string; | ||
2558 | + } | ||
2559 | + function seems_utf8($Str) { # by bmorel at ssi dot fr | ||
2560 | + $length = strlen($Str); | ||
2561 | + for ($i = 0; $i < $length; $i++) { | ||
2562 | + if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb | ||
2563 | + elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n = 1; # 110bbbbb | ||
2564 | + elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n = 2; # 1110bbbb | ||
2565 | + elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n = 3; # 11110bbb | ||
2566 | + elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n = 4; # 111110bb | ||
2567 | + elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n = 5; # 1111110b | ||
2568 | + else return false; # Does not match any model | ||
2569 | + for ($j = 0; $j < $n; $j++) { # n bytes matching 10bbbbbb follow ? | ||
2570 | + if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80)) | ||
2571 | + return false; | ||
2572 | + } | ||
2573 | + } | ||
2574 | + return true; | ||
2575 | + } | ||
2477 | } | 2576 | } |
2478 | ?> | 2577 | ?> |
2479 | \ No newline at end of file | 2578 | \ No newline at end of file |