← Desenvolvimento

Problemas com acentuação...

Lida 7525 vezes

Offline

Thomato 
Membro
Mensagens 4125 Gostos 3
Feedback +2

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

Boas.

Esta é a página de pesquisa do script CUTENEWS. Mas ao Pesquisar com acentos ele não permite...

Código: [Seleccione]

<head>


<title>Pesquisa</title>

<style>
input {
font-family: Arial;
font-size: 15px;
background-color: #E4E4E4;
border-width: 0px;
border-color: #FF0052;
     }
  </style>

</head>

<?php
error_reporting 
(E_ALL E_NOTICE);

$cutepath =  __FILE__;
$cutepath preg_replace"'\\\search\.php'"""$cutepath);
$cutepath preg_replace"'/search\.php'"""$cutepath);

$files_arch = array();

require_once(
"$cutepath/inc/functions.inc.php");

//check for bad _GET and _POST
if($dosearch == "yes"){
  
$check_params array_merge($_GET$_POST);
  foreach(
$check_params as $param_key=>$param_val){
    if( !empty(
$param_val) && !preg_match('/^[a-zA-Z0-9\- ]{0,255}$/'$param_val) ){
      die(
"Error! the parameter '$param_key' contains illigal characters");
    }
  }
}

$user_query cute_query_string($QUERY_STRING, array("search_in_archives""start_from""archive""subaction""id""cnshow",
"ucat","dosearch""story""title""user""from_date_day""from_date_month""from_date_year""to_date_day""to_date_month""to_date_year"));
$user_post_query cute_query_string($QUERY_STRING, array("search_in_archives""start_from""archive""subaction""id""cnshow",
"ucat","dosearch""story""title""user""from_date_day""from_date_month""from_date_year""to_date_day""to_date_month""to_date_year"), "post");

// Define Users
$all_users file("$cutepath/data/users.db.php");
$my_names = array();
foreach(
$all_users as $my_user)
{
        if(!
eregi("<\?",$member_db_line)){
                
$user_arr explode("|",$my_user);
                if(
$user_arr[4] != ""){ $my_names[$user_arr[2]] = "$user_arr[4]"; }
                else{ 
$my_names[$user_arr[2]] = "$user_arr[2]"; }
    }
}
// Show Search Form
echo<<<HTML
<script language='javascript' type="text/javascript">
        function mySelect(form){
            form.select();
    }
        function ShowOrHide(d1, d2) {
          if (d1 != '') DoDiv(d1);
          if (d2 != '') DoDiv(d2);
        }
        function DoDiv(id) {
          var item = null;
          if (document.getElementById) {
                item = document.getElementById(id);
          } else if (document.all){
                item = document.all[id];
          } else if (document.layers){
                item = document.layers[id];
          }
          if (!item) {
          }
          else if (item.style) {
                if (item.style.display == "none"){ item.style.display = ""; }
                else {item.style.display = "none"; }
          }else{ item.visibility = "show"; }
         }
</script>
<form method=GET action="
$PHP_SELF?subaction=search">
<input type=hidden name=dosearch value=yes>

<div align="center">
  <table border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><table width="100%" cellspacing="0" cellpadding="0">
          <td width="100%">
            <p align="right"><input type=text value="
$story" name=story size="24">
        </table></td>
    </tr>
    


</table>
</div>

          </td>
    </tr>
    <tr>
      <td>
        <p align="center">
    <input type=submit value=PROCURAR>
      </td>
    </tr>
  </table>
</div>
$user_post_query
</form>
<center>
HTML;

// Don't edit below this line unless you know what you are doing !!!

if($dosearch == "yes")
{

    if( 
$from_date_day != "" and $from_date_month != "" and $from_date_year != "" and $to_date_day != "" and $to_date_month != "" and $to_date_year != "" )
    {
        
$date_from         mktime(0,0,0,$from_date_month,$from_date_day,$from_date_year);
        
$date_to         mktime(0,0,0,$to_date_month,$to_date_day,$to_date_year);

        
$do_date TRUE;
    }


        
$story trim($story);

        if(
$search_in_archives){
            if(!
$handle opendir("$cutepath/data/archives")){ die("<center>Can not open directory $cutepath/data/archives "); }
                while (
false !== ($file readdir($handle)))
                {
                        if(
$file != "." and $file != ".." and eregi("news"$file))
                        {
                                
$files_arch[] = "$cutepath/data/archives/$file";
                }
                }
        }
    
$files_arch[] = "$cutepath/data/news.txt";

    foreach(
$files_arch as $file)
    {
        
$archive FALSE;
        if(
ereg("([[:digit:]]{0,})\.news\.arch"$file$regs)){ $archive $regs[1]; }
        
$all_news_db file("$file");
            foreach(
$all_news_db as $news_line){
                        
$news_db_arr explode("|",$news_line);
                        
$found  0;

                        
$fuser  FALSE;
                        
$ftitle FALSE;
                        
$fstory FALSE;
                        if(
$title and @preg_match("/$title/i""$news_db_arr[2]")){ $ftitle TRUE; }
                        if(
$user  and @preg_match("/\b$user\b/i""$news_db_arr[1]")){ $fuser TRUE; }
                        if(
$story and (@preg_match("/$story/i""$news_db_arr[4]") or @preg_match("/$story/i""$news_db_arr[3]"))){ $fstory TRUE;}

                        if(
$title and $ftitle){ $ftitle TRUE; }elseif(!$title){ $ftitle TRUE; }else{ $ftitle FALSE; }
                        if(
$story and $fstory){ $fstory TRUE; }elseif(!$story){ $fstory TRUE; }else{ $fstory FALSE; }
                        if(
$user  and $fuser) { $fuser  TRUE; }elseif(!$user) { $fuser  TRUE; }else{ $fuser  FALSE; }
            if(
$do_date)
            {
                    if(
$date_from $news_db_arr[0] and  $news_db_arr[0] < $date_to){ $fdate TRUE; }else{ $fdate FALSE; }
            }else{ 
$fdate TRUE; }

                        if(
$fdate and $ftitle and $fuser and $fstory){ $found_arr[$news_db_arr[0]] = $archive; }

                }
//foreach news line
        
}


        echo
"<br /><b>ENCONTRADOS "count($found_arr)." RESULTADOS:</b><br />";


            if(
$do_date){echo"from ".@date("d F Y",$date_from)." to ".@date("d F Y",$date_to)."<br />";}


    
// Display Search Results
    
if(is_array($found_arr)){
        foreach(
$found_arr as $news_id => $archive)
        {
            if(
$archive){$all_news file("$cutepath/data/archives/$archive.news.arch");}
            else{ 
$all_news file("$cutepath/data/news.txt"); }

            foreach(
$all_news as $single_line)
                           {
                                   
$item_arr explode("|",$single_line);
                                   
$local_id $item_arr[0];

                                   if(
$local_id == $news_id){
////////// Showing Result

                    
echo"<br /><b><a href=\"$PHP_SELF?misc=search&subaction=showfull&id=$local_id&archive=$archive&cnshow=news&ucat=$item_arr[6]&start_from=&$user_query\">$item_arr[2]</a></b>";

////////// End Showing Result
                
}
                           }
                   }
     }else{ echo
"There are no news matching your search criteria"; }

}
//if user wants to search
elseif( ($misc == "search") and ($subaction == "showfull" or $subaction == "showcomments" or $_POST["subaction"] == "addcomment" or $subaction == "addcomment")){

        require_once(
"$cutepath/show_news.php");

        unset(
$action,$subaction);
}

?>




Alguma solução?

Abraço.
Offline

Emanuel Santos 
Elite
Mensagens 848 Gostos 2
Feedback +25

Troféus totais: 25
Trófeus: (Ver todos)
Windows User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1

Pelo que entendo é aquela expressão regular /^[a-zA-Z0-9\- ]{0,255}$/ , tens que a alterar. PHP + Expressões regulares + Acentos = Pain in the ass

Podes é remover os acentos e verificar mas depois passas o valor original.
Offline

Thomato 
Membro
Mensagens 4125 Gostos 3
Feedback +2

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

Pelo que entendo é aquela expressão regular /^[a-zA-Z0-9\- ]{0,255}$/ , tens que a alterar. PHP + Expressões regulares + Acentos = Pain in the ass

Podes é remover os acentos e verificar mas depois passas o valor original.


Não percebi :S
Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

Olá! :)

Altera esta linha:
Código: [Seleccione]
if( !empty($param_val) && !preg_match('/^[a-zA-Z0-9\- ]{0,255}$/', $param_val) ){
Por esta:
Código: [Seleccione]
if( !empty($param_val) && !preg_match('/^[A-ZÀ-ú0-9\- ]{0,255}$/i', $param_val) ) {


Nota: Testei em ambiente Windows e funcionou bem, se contigo não funcionar avisa porque há sempre outras soluções :)
Offline

Thomato 
Membro
Mensagens 4125 Gostos 3
Feedback +2

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

Iceburn, agora não estou com acesso ao servidor, não estou no meu PC... Estou na mesa de som por causa das transmissões da Pixel.. Quando tiver troco para experimentar.

Obrigado ;)