• 25-04-2009, 11:40:54
    #1
    Arkadaşlar search.php sayfamda şöyle bir kod var ve bu kod bazı karakterlerin (("/") slaç gibi) veritabanına işlenmesini engelliyor.
    	/**
    	 * Prepares results from search for display
    	 *
    	 * @param string The source string
    	 * @param int Number of chars to trim
    	 * @param string The searchword to select around
    	 * @return string
    	 */
    	function prepareSearchContent( $text, $length = 200, $searchword )
    	{
    		// strips tags won't remove the actual jscript
    		$text = preg_replace( "'<script[^>]*>.*?</script>'si", "", $text );
    		$text = preg_replace( '/{.+?}/', '', $text);
    		//$text = preg_replace( '/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is','\2', $text );
    		// replace line breaking tags with whitespace
    		$text = preg_replace( "'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si", ' ', $text );
    		return SearchHelper::_smartSubstr( strip_tags( $text ), $length, $searchword );
    	}
    	/**
    	 * Checks an object for search terms (after stripping fields of HTML)
    	 *
    	 * @param object The object to check
    	 * @param string Search words to check for
    	 * @param array List of object variables to check against
    	 * @returns boolean True if searchTerm is in object, false otherwise
    	 */
    	function checkNoHtml($object, $searchTerm, $fields) {
    		$searchRegex = array(
    				'#<script[^>]*>.*?</script>#si',
    				'#<style[^>]*>.*?</style>#si',
    				'#<!.*?(--|]])>#si',
    				'#<[^>]*>#i'
    				);
    		$terms = explode(' ', $searchTerm);
    		if(empty($fields)) return false;
    		foreach($fields AS $field) {
    			if(!isset($object->$field)) continue;
    			$text = $object->$field;
    			foreach($searchRegex As $regex) {
    				$text = preg_replace($regex, '', $text);
    			}
    			foreach($terms AS $term) {
    				if(JString::stristr($text, $term) !== false) {
    					return true;
    				}
    			}
    		}
    		return false;
    	}
    Ben buradaki kodlara ekleme yaparak aşağıdaki karakterlerin türkçe karşılıklarını ('ı','ş','ü','ç','ö','ğ','ş','Ç','i','ğ','Ş','Ö',' Ü','ı', 'ş', 'ç', 'ö', 'ğ', 'ş', 'Ç', 'i', 'ğ', 'Ş', 'Ö', 'Ü', 'ü', 'ğ') veritabanına işlemek istiyorum veya bu karakterlerin geçtiği kelimelerin veritabanına işlenmesini engellemek istiyorum
    'ı','Å?','ü','ç','ö','Ä?','ÅŸ','Ç','İ','ÄŸ' ,'Å?','Ö','Ü','ı','Å?','ç','ö','Ä?','ÅŸ','Ç' ,'İ','ÄŸ','Å?','Ö','Ü','ü','ÄŸ'
    Bu konuda yardımlarınızı bekliyorum.
    teşekkürler
  • 25-04-2009, 11:45:01
    #2
    Üyeliği durduruldu
    SearchHelper::_smartSubstr
    JString::stristr

    gibi class in içerisindeki fonksiyonlarda mevcut verdiginiz kodlarda. birde fonkisyonları vermişsiniz ama sitede bunlar ne şekilde hangisi ne için cagrildigi kisminida acabilir misiniz
  • 25-04-2009, 11:49:53
    #3
    str_replace ile değiştirebilirsin
        function prepareSearchContent( $text, $length = 200, $searchword )
        {
            // strips tags won't remove the actual jscript
            $text = preg_replace( "'<script[^>]*>.*?</script>'si", "", $text );
            $text = preg_replace( '/{.+?}/', '', $text);
            //$text = preg_replace( '/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is','\2', $text );
            // replace line breaking tags with whitespace
            $text = preg_replace( "'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si", ' ', $text );
            $text = str_replace("ı","ı",$text); //örnek 
            $text = str_replace("Å?","ş",$text); //örnek
            return SearchHelper::_smartSubstr( strip_tags( $text ), $length, $searchword );
        }
    bu şekilde cogaltabilirsin(yaninda örnek yazanlar)
  • 25-04-2009, 12:07:29
    #4
    Arkadaşlar search.php dosyasının tamamı aşağıdaki linkte LaCReMeL arkadaşımın verdiği kodları şimdi ekledim ve denedim olmadı.
    sistem joomla veritabanı kodlaması utf8_general_ci
    veritabanını boşaltıyorum sitede bozuk karakterle arama yapıyorum bozuk karakterleri yine tabloya işliyor

    Tablo : adı jos_core_log_searches
    Alan : search_term


    Joomla! 1.5.10: administrator/components/com_search/helpers/search.php Quellcode
  • 25-04-2009, 15:22:54
    #5
    $text = preg_replace("/[^0-9a-zA-ZÄzÜŞİÖÇğüşıöç]/ ", "", $text);
    bu şekilde dene izin vermek istedigin karakterleri sona ekle
    mesela -(tire)'ye izin verelim

    $text = preg_replace("/[^0-9a-zA-ZÄzÜŞİÖÇğüşıöç]-/ ", "", $text);
    birde _(alt tire) ya izin verelim
    $text = preg_replace("/[^0-9a-zA-ZÄzÜŞİÖÇğüşıöç]-_/ ", "", $text);
    gibi
  • 06-04-2020, 02:16:44
    #6
    Üyeliği durduruldu
    Konuyu güncellemek gibi oluyor ama ben top.location cümlesini engellemek istiyorum. Yapamadım bir türlü..