Θέμα αναζήτησης με ελληνικά, με τόνους και χωρίς

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
stfan
Δημοσιεύσεις: 2
Εγγραφή: 06 Απρ 2011 12:53

Θέμα αναζήτησης με ελληνικά, με τόνους και χωρίς

Δημοσίευση από stfan » 06 Απρ 2011 13:35

Εχω ενα site απο custom script, και έχω το εξής πρόβλημα με τη λειτουργεία αναζήτησης.
Η λειτουργεία αναζήτησης, αναγνωρίζει διαφορετικές λέξεις αυτές που έχουν τόνους και αυτές που δεν έχουν. Οπως καταλαβαίνετε δημιουργείται πρόβλημα, γιατί άλλοι βάζουν και άλλοι δεν βάζουν.
Οπότε σκεφτόμουν να φτίαξω ενα function στο search.php που να θεωρεί τα τονισμένα γράμματα ίδια με αυτά χωρίς τόνο.

Θα σας κάνω παράθεση τον κώδικα search.php

Κώδικας: Επιλογή όλων

<?php

include&#40;"include/config.php"&#41;;
include&#40;"include/functions/import.php"&#41;;
$thebaseurl = $config&#91;'baseurl'&#93;;

$page = intval&#40;$_REQUEST&#91;page&#93;&#41;;

if&#40;$page==""&#41;
&#123;
	$page = "1";
&#125;
$currentpage = $page;

if &#40;$page >=2&#41;
&#123;
	$pagingstart = &#40;$page-1&#41;*$config&#91;items_per_page&#93;;
&#125;
else
&#123;
	$pagingstart = "0";
&#125;

$key = htmlentities&#40;strip_tags&#40;$_REQUEST&#91;'key'&#93;&#41;, ENT_COMPAT, "UTF-8"&#41;;
$text = htmlentities&#40;strip_tags&#40;$_REQUEST&#91;'query'&#93;&#41;, ENT_COMPAT, "UTF-8"&#41;;


if&#40;$text != ""&#41;
&#123;
	$sterm&#91;&#93; = $text;
	$sterm&#91;0&#93; = str_replace&#40;"  ", "", $sterm&#91;0&#93;&#41;;
	$sterm&#91;0&#93; = str_replace&#40;"-", "", $sterm&#91;0&#93;&#41;;
	$stermsplit = explode&#40;" ",$sterm&#91;0&#93;&#41;;
	$stermstr = "";
	if &#40;count&#40;$stermsplit&#41;>=1&#41; 
	&#123;
		for&#40;$i=0;$i<count&#40;$stermsplit&#41;;$i++&#41;
		&#123;
			if &#40;$stermsplit&#91;$i&#93; != "" && $stermsplit&#91;$i&#93; != "-" && $stermsplit&#91;$i&#93; != " "&#41;
			&#123;
				$stermstr.="AND A.title like '%$stermsplit&#91;$i&#93;%' ";
			&#125;
		&#125;
	&#125;
	$stermstr .= " ";
&#125;

$query1 = "SELECT count&#40;*&#41; as total FROM posts A, members B, categories C WHERE A.active='1' $stermstr AND A.USERID=B.USERID AND A.category=C.CATID order by A.PID desc limit $config&#91;maximum_results&#93;";
$query2 = "SELECT A.PID, A.USERID, A.open, B.username, A.title, A.question, C.name, C.seo, A.time_added FROM posts A, members B, categories C WHERE A.active='1' $stermstr AND A.USERID=B.USERID AND A.category=C.CATID order by A.PID desc limit $pagingstart, $config&#91;items_per_page&#93;";


$executequery1 = $conn->Execute&#40;$query1&#41;;

$stotal = $executequery1->fields&#91;'total'&#93;;



if &#40;$stotal > 0&#41;
&#123; 
	if&#40;$executequery1->fields&#91;'total'&#93;<=$config&#91;maximum_results&#93;&#41;
	&#123;
		$total = $executequery1->fields&#91;'total'&#93;;
	&#125;
	else
	&#123;
		$total = $config&#91;maximum_results&#93;;
	&#125;
	
	$toppage = ceil&#40;$total/$config&#91;items_per_page&#93;&#41;;
	if&#40;$toppage==0&#41;
	&#123;
		$xpage=$toppage+1;
	&#125;
	else
	&#123;
		$xpage = $toppage;
	&#125;
	
	$executequery2 = $conn->Execute&#40;$query2&#41;;
	$posts = $executequery2->getrows&#40;&#41;;
	$beginning=$pagingstart+1;
	$ending=$pagingstart+$executequery2->recordcount&#40;&#41;;
	$pagelinks="";
	$k=1;
	$theprevpage=$currentpage-1;
	$thenextpage=$currentpage+1;
	

	if&#40;$text != ""&#41;
	&#123;
		$add .= "&query=$text";

	&#125;
	
	if &#40;$currentpage > 0&#41;
	&#123;
		if&#40;$currentpage > 1&#41; 
		&#123;
			$pagelinks.="<a href='$thebaseurl/search?$add&page=1'>".$lang&#91;'7'&#93;."</a>&nbsp;";
			$pagelinks.="...&nbsp;";
			$pagelinks.="<a href='$thebaseurl/search?$add&page=$theprevpage'>&laquo; ".$lang&#91;'8'&#93;."</a>&nbsp;";
		&#125;
		
		$counter=0;
		
		$lowercount = $currentpage-5;
		if &#40;$lowercount <= 0&#41; $lowercount = 1;
		
		while &#40;$lowercount < $currentpage&#41;
		&#123;
			$pagelinks.="<a href='$thebaseurl/search?$add&page=$lowercount'>$lowercount</a>&nbsp;";
			$lowercount++;
			$counter++;
		&#125;
		
		$pagelinks.="<a class='selected'>$currentpage</a>&nbsp;";
		
		$uppercounter = $currentpage+1;
		
		while &#40;&#40;$uppercounter < $currentpage+10-$counter&#41; && &#40;$uppercounter<=$toppage&#41;&#41;
		&#123;
			$pagelinks.="<a href='$thebaseurl/search?$add&page=$uppercounter'>$uppercounter</a>&nbsp;";
			$uppercounter++;
		&#125;
		
		if&#40;$currentpage < $toppage&#41; 
		&#123;
			$pagelinks.="<a href='$thebaseurl/search?$add&page=$thenextpage'>".$lang&#91;'9'&#93;." &raquo;</a>&nbsp;";
			$pagelinks.="...&nbsp;";
			$pagelinks.="<a href='$thebaseurl/search?$add&page=$toppage'>".$lang&#91;'10'&#93;."</a>&nbsp;";
		&#125;
	&#125;
&#125;

$templateselect = "search.tpl";
$pagetitle = stripslashes&#40;$text&#41;." ".$lang&#91;'66'&#93;;

STemplate&#58;&#58;assign&#40;'pagetitle',$pagetitle&#41;;

//TEMPLATES BEGIN
STemplate&#58;&#58;assign&#40;'key',$key&#41;;
STemplate&#58;&#58;assign&#40;'query',$text&#41;;
STemplate&#58;&#58;assign&#40;'stotal',$stotal&#41;;
STemplate&#58;&#58;assign&#40;'beginning',$beginning&#41;;
STemplate&#58;&#58;assign&#40;'ending',$ending&#41;;
STemplate&#58;&#58;assign&#40;'pagelinks',$pagelinks&#41;;
STemplate&#58;&#58;assign&#40;'total',$total&#41;;
STemplate&#58;&#58;assign&#40;'ques',$posts&#41;;
STemplate&#58;&#58;display&#40;'header.tpl'&#41;;
STemplate&#58;&#58;display&#40;$templateselect&#41;;
STemplate&#58;&#58;display&#40;'footer.tpl'&#41;;
//TEMPLATES END
?>
στο include("include/functions/import.php"); βρίσκονται functions

που θα μπορούσα να και τι ακριβώς θα πρέπει να γράψω για να δουλέψει αυτο που θέλω?
σκεφτόμουν κάτι τέτοιο κάπου

Κώδικας: Επιλογή όλων

function replace_accents&#40;$string&#41;
&#123;
  return str_replace&#40; array&#40;'ά','έ','ή','ί','ϊ','ΐ','ό','ύ','ϋ','ΰ','ώ','ς'&#41;, array&#40;'α','ε','η','ι','ι', 'ι', 'ο','υ','υ','υ', 'ω','σ'&#41;, $string&#41;;
&#125; 
οτι και αν έχω προσπαθήσει δεν δουλεύει( ειμαι αρχάριος στον τομέα αυτό)
Όποιος μπορέσει να βοηθήσει παίδες.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Θέμα αναζήτησης με ελληνικά, με τόνους και χωρίς

Δημοσίευση από jpk » 06 Απρ 2011 20:34

Από ότι κατάλαβα έχεις πρόσβαση στην βάση δεδομένων και είναι MySQL. Σε αυτή την περίπτωση η πιο απλή λύση είναι να τροποποιήσεις το collation του πεδίου που θέλεις να γίνεται η αναζήτηση με τόνους ή χωρίς ή κεφαλαία σε «utf8_general_ci». Ελπίζω να βοήθησα&#8230;

stfan
Δημοσιεύσεις: 2
Εγγραφή: 06 Απρ 2011 12:53

Θέμα αναζήτησης με ελληνικά, με τόνους και χωρίς

Δημοσίευση από stfan » 06 Απρ 2011 21:17

jpk έγραψε:Από ότι κατάλαβα έχεις πρόσβαση στην βάση δεδομένων και είναι MySQL. Σε αυτή την περίπτωση η πιο απλή λύση είναι να τροποποιήσεις το collation του πεδίου που θέλεις να γίνεται η αναζήτηση με τόνους ή χωρίς ή κεφαλαία σε «utf8_general_ci». Ελπίζω να βοήθησα&#8230;
Ευχαριστώ για την απάντηση αλλά το collation είναι ήδη σε utf8_general_ci.
Στην ίδια mysql έχω και wordpress στο οποίο η αναζήτηση δουλεύει κανονικά με τόνους και χωρίς. Άρα φαντάζομαι πως δεν έχει να κάνε με mysql γιαυτό ρωτάω αν γίνεται κατί με καποιο function

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες