[CON-321] Standard-Suchmodul und UTF-8

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

[CON-321] Standard-Suchmodul und UTF-8

Beitrag von Halchteranerin » Sa 6. Feb 2010, 10:52

Hallo,

ich habe das Problem, dass ich das "Standard"-Suchmodul vom Beispielmandanten benutze (wobei ich gesehen habe, dass es zwischen den Versionen 4.8.5 und 4.8.12 auch wieder Unterschiede gibt, die sind unterschiedlich lang - und unter 4.8.5 scheint die auch nicht so gut zu funktionieren, es kommt die Meldung, dass nichts gefunden wurde, und trotzdem werden Treffer angezeigt, deswegen ist vielleicht auch nur die Suche von 4.8.12 wichtig) und habe das Problem, dass die Ausgabe nicht so schön aussieht. Die Seite läuft mit UTF-8, und die Suchausgabe berücksichtigt das nicht, d. h. statt der Sonderzeichen erscheint in der Suchausgabe so etwas: Å� (statt ş) oder Å£ (statt ţ). Komischerweise passiert das aber nicht bei den Überschriften, sondern nur bei den Auszügen aus den Artikeln, die in der Trefferliste angezeigt werden.

Gibt es eine Lösung dafür? Ich habe mir zwar den Quelltext des Moduls angeschaut, aber soweit reichen meine PHP-Kenntnisse leider doch nicht. :oops:

Danke für eventuelle Hinweise!
Christa
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von DerFrank » Sa 6. Feb 2010, 11:57

Hast Du mal nachgesehen, wie die Begriffe, die in der Suchausgabe als Treffer aufgeführt werden, in der DB liegen?! Hatte sowas mal, da waren die Texte auf der Webseite OK aber Dinge aus den Artikeleigenschaften waren falsch in der DB.
aitsu open source cms framework für contenido bei googlecode...

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von Halchteranerin » Sa 6. Feb 2010, 12:10

Nein, aber ich hatte im HTML-Quelltext geschaut, und da sind sie gleich im Artikeltext und in den Überschriften. Ich kann aber gleich in die DB gucken, auch wenn ich nicht viel Hoffnung habe. Was meinst du aber mit den Artikeleigenschaften? dort steht doch nichts über die Codierung, und im Artikel selbst sind die Sonderzeichen ok, es ist nur die Ausgabe der Suchergebnisse mit den Artikelanfängen, wo die Sonderzeichen verunstaltet werden. Deswegen weiß ich auch nicht so recht, was ich in der DB überhaupt nachschauen soll. :oops:
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von DerFrank » Di 2. Mär 2010, 16:17

Das Problem ist, dass die Daten alle unterschiedlich in die DB kommen. TYPE_TEXT geht so rein. TYPE_HTML wird url_decodiert. Wie Dein Modul aussieht, weiß ich auch nicht. Damit will ich nur sagen, dass Du unter Umständen zwei Konvertierungen brauchst. ;)

http://www.utf8-zeichentabelle.de/
aitsu open source cms framework für contenido bei googlecode...

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von kummer » Di 2. Mär 2010, 16:58

Ich vermute mal, dass bei der Ausgabe bei der Suche ein htmlentities vorgenommen wird. Und dort - auch eine Mutmassung - ist kein Encoding mit angegeben. Es ist so, dass PHP iso-8859-1 annimmt, wenn nichts weiter spezifiziert ist. sind die daten aber utf8, dann ist die darstellung falsch. Wenn bei der Ausgabe ein htmlentities gemacht wird, sollte als zweiter Parameter utf-8 bezeichnet sein.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von Halchteranerin » Di 2. Mär 2010, 22:47

kummer hat geschrieben:Wenn bei der Ausgabe ein htmlentities gemacht wird, sollte als zweiter Parameter utf-8 bezeichnet sein.
Das ist zwar richtig, aber ich steige da nicht richtig durch die Syntax von htmlentities durch. :oops: Die Zeile sieht so aus:

Code: Alles auswählen

$searchterm = urldecode(htmlentities(strip_tags(stripslashes($_GET['searchterm']))));
(bzw. es gibt noch eine Zeile mit $_POST, aber obige Zeile umgebaut reicht mir aus, das andere kann ich übertragen :D)

Außerdem bin ich mir nicht sicher, dass das überhaupt ausreicht, weil z. B. auch htmlspecialchars vorkommt, und ich habe bei php.net gesehen, dass man da auch utf-8 übergeben kann. :?

Also die komplette Modulausgabe wäre die:

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Search output box
*
* @version 1.0.1
* @author Willi Man
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2004-05-04
* modified 2005-07-12 Andreas Lindner
* modified 2008-04-11 Rudi Bieller
* modified 2008-05-06 Rudi Bieller Added CON_SEARCH_MAXLEN_TEASERTEXT; Fixed <nobr> to be xhtml compliant;
*                       Removed $action, $sCatName = getCategoryName($cat_id, $db); which was not used at all and 
*                       added a default output in case article/module was called directly (strlen(trim($searchterm)) == 0)
* }}
*
* $Id$
*/

#System properties in use:
#Type: searchrange, Name: include
#Contains comma-separated list of cats to be included into search (sub-cats are included automatically)

#Logical combination of search terms with AND or OR

define('CON_SEARCH_ITEMSPERPAGE', 10);
define('CON_SEARCH_MAXLEN_TEASERTEXT', 200);

#Includes
cInclude('classes', 'class.search.php');
cInclude('classes', 'class.artspec.php');
cInclude('classes', 'class.template.php');
cInclude('includes', 'functions.api.string.php');
cInclude('classes', 'class.article.php');

#Initiliaze template object
if (!is_object($tpl)) {
    $tpl = new Template;
}
$tpl->reset();

#Settings
$oArticleProp = new Article_Property($db, $cfg);
$iArtspecReference = 2;

$cApiClient = new cApiClient($client);
$sSearchRange = $cApiClient->getProperty('searchrange', 'include');
$aSearchRange = explode(',', $sSearchRange);

#Multilingual settings
$sYourSearchFor = mi18n("Ihre Suche nach");
$sMore = mi18n("mehr");

#Get search term and pre-process it
if (isset ($_GET['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_GET['searchterm']))));
}
elseif (isset ($_POST['searchterm'])) {
    $searchterm = urldecode(htmlentities(strip_tags(stripslashes($_POST['searchterm']))));
}
$searchterm = str_replace(' + ', ' AND ', $searchterm);
$searchterm = str_replace(' - ', ' NOT ', $searchterm);
$searchterm_display = $searchterm;

#Get all article specs
$sql = "SELECT
        idartspec, artspec
    FROM
        ".$cfg['tab']['art_spec']."
    WHERE
        client=$client AND
        lang=$lang AND
        online=1";

$db->query($sql);
$rows = $db->num_rows();
$aArtspecOnline = array ();
$aArtSpecs = array ();
$c = 1;
$d = 1;
$e = 1;
while ($db->next_record()) {
    $aArtSpecs[] = $db->f('idartspec');
}
$aArtSpecs[] = 0;

if (strlen(trim($searchterm)) > 0) {
    #Fix for PHP < 4.3
    if( !function_exists( 'html_entity_decode' ) )
    {
        function html_entity_decode( $given_html, $quote_style = ENT_QUOTES )
        {
            $trans_table = array_flip(get_html_translation_table( HTML_SPECIALCHARS, $quote_style ));
            $trans_table['''] = "'";
            return ( strtr( $given_html, $trans_table ) );
        }
    }

    #Parse search term and set search options
    $searchterm = html_entity_decode($searchterm);

    if (stristr($searchterm, ' or ') === FALSE) {
        $combine = 'and';
    } else {
        $combine = 'or';
    }
    $searchterm = str_replace(' and ', ' ', strtolower($searchterm));
    $searchterm = str_replace(' or ', ' ', strtolower($searchterm));

        $options = array ('db' => 'regexp', // use db function regexp
        'combine' => $combine, // combine searchterms with and
        'exclude' => false, // => searchrange specified in 'cat_tree', 'categories' and 'articles' is excluded, otherwise included (exclusive)
        'cat_tree' => $aSearchRange, // searchrange 
        'artspecs' => $aArtSpecs, // array of article specifications => search only articles with these artspecs
    'protected' => true); // => do not search articles or articles in categories which are offline or protected

    $search = new Search($options);

    $cms_options = array ("head", "html", "htmlhead", "htmltext", "text"); // search only in these cms-types
    $search->setCmsOptions($cms_options);

    #Execute search
    $aSearchResults = $search->searchIndex($searchterm, ''); 

    #Build results page
    if (count($aSearchResults) > 0) {
        $tpl->set('s', 'result_page', mi18n("Ergebnis-Seite").':');

        #Build meessage
        $message = $sYourSearchFor." '".htmlspecialchars(strip_tags($searchterm_display))."' ".mi18n("hat $$$ Treffer ergeben").":";
        $message = str_replace('$$$', count($aSearchResults), $message);
        $tpl->set('s', 'MESSAGE', $message);

        #Number of results per page
        $number_of_results = CON_SEARCH_ITEMSPERPAGE;
        $oSearchResults = new SearchResult($aSearchResults, $number_of_results);

        $num_res = $oSearchResults->getNumberOfResults() + $pdf_count;
        $num_pages = $oSearchResults->getNumberOfPages();
        $oSearchResults->setReplacement('<strong>', '</strong>'); // html-tags to emphasize the located searchterms

        #Get current result page
        if (isset ($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0) {
            $page = $_GET['page'];
            $res_page = $oSearchResults->getSearchResultPage($page);
        } else {
            $page = 1;
            $res_page = $oSearchResults->getSearchResultPage($page);
        }

        #Build links to other result pages
        for ($i = 1; $i <= $num_pages; $i ++) {
            // this is just for sample client - modify to your needs!
            if ($cfg['url_builder']['name'] == 'front_content') {
                $aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchterm_display, 'page' => ($i.$sArtSpecs));
            } else {
                $aParams = array('search' => array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchterm_display, 'page' => ($i.$sArtSpecs)), 
                                'idcat' => $idcat, // needed to build category path
                                'lang' => $lang, // needed to build category path
                                'level' => 1); // needed to build category path
            }
            try {
                $nextlink = Contenido_Url::getInstance()->build($aParams);
            } catch (InvalidArgumentException $e) {
                $nextlink = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm_display.'&page='.$i.$sArtSpecs);
            }
            if ($i == $page) {
                $nextlinks .= '<span style="white-space:nowrap;">&nbsp;<strong>'.$i.'</strong>&nbsp;</span>';
            } else {
                $nextlinks .= '<span style="white-space:nowrap;">&nbsp;<a href="'.$nextlink.'" title="'.$i.'. '.mi18n("Ergebnisseite anzeigen").'">'.$i.'</a>&nbsp;</span>';
            }
        }
        $tpl->set('s', 'PAGES', $nextlinks);

        #Build link to next result page
        if ($page < $num_pages) {
            $n = $page +1;
            // this is just for sample client - modify to your needs!
            if ($cfg['url_builder']['name'] == 'front_content') {
                $aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchterm_display, 'page' => ($n.$sArtSpecs));
            } else {
                $aParams = array('search' => array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchterm_display, 'page' => ($n.$sArtSpecs)), 
                                'idcat' => $idcat, // needed to build category path
                                'lang' => $lang, // needed to build category path
                                'level' => 1); // needed to build category path
            }
            try {
                $next = Contenido_Url::getInstance()->build($aParams);
            } catch (InvalidArgumentException $e) {
                $next = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$n.$sArtSpecs);
            }
            $nextpage .= '&nbsp;<a href="'.$next.'" title="'.mi18n("n&auml;chste Ergebnisseite anzeigen").'">'.mi18n("vor").'&nbsp;&nbsp;<img src="images/link_pfeil_klein.gif" alt="" /></a>';
            $tpl->set('s', 'NEXT', $nextpage);
        } else {
            $tpl->set('s', 'NEXT', '');
        }

        #Build link to previous result page
        if ($page > 1) {
            $p = $page -1;
            // this is just for sample client - modify to your needs!
            if ($cfg['url_builder']['name'] == 'front_content') {
                $aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchterm_display, 'page' => ($p.$sArtSpecs));
            } else {
                $aParams = array('search' => array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'searchterm' => $searchterm_display, 'page' => ($p.$sArtSpecs)), 
                                'idcat' => $idcat, // needed to build category path
                                'lang' => $lang, // needed to build category path
                                'level' => 1); // needed to build category path
            }
            try {
                $pre = Contenido_Url::getInstance()->build($aParams);
            } catch (InvalidArgumentException $e) {
                $pre = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$p.$sArtSpecs);
            }
            $prevpage .= '<a href="'.$pre.'" title="'.mi18n("vorherige Ergebnisseite anzeigen").'"><img src="images/link_pfeil_klein_links.gif" alt="" />&nbsp;&nbsp;'.mi18n("zur&uuml;ck").'</a>&nbsp;';
            $tpl->set('s', 'PREV', $prevpage);
        } else {
            $tpl->set('s', 'PREV', '');
        }

        if (count($res_page) > 0) {
            $i = 1;
            #Build single search result on result page
            foreach ($res_page as $key => $val) {
                $num = $i + (($page -1) * $number_of_results);
                $oArt = new Article($key, $client, $lang);
                #Get publishing date of article
                $pub_system = $oArt->getField('published');
                $pub_user = trim(strip_tags($oArt->getContent('HEAD', 90)));
                if ($pub_user != '') {
                    $show_pub_date = "[".$pub_user."]";
                } else {
                    $show_pub_date = '';
                    if ($pub_system[8] != '0') {
                        $show_pub_date .= $pub_system[8];
                    }
                    $show_pub_date .= $pub_system[9].'.';
                    if ($pub_system[5] != '0') {
                        $show_pub_date .= $pub_system[5];
                    }
                    $show_pub_date .= $pub_system[6].".".$pub_system[0].$pub_system[1].$pub_system[2].$pub_system[3]."]";
                    $show_pub_date = "[".$show_pub_date;
                }
            
                #Get text and headline of current article
                $iCurrentArtSpec = $oArticleProp->getArticleSpecification($key, $lang);
                $aHeadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 1);
                $aSubheadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 2);
                $text = $oSearchResults->getSearchContent($key, 'HTML', 1);
                $text = capiStrTrimAfterWord($text[0], CON_SEARCH_MAXLEN_TEASERTEXT);
                $headline = capiStrTrimAfterWord($aHeadline[0], CON_SEARCH_MAXLEN_TEASERTEXT); # conflict with capiStrTrimAfterWord and setReplacement('<strong>', '</strong>')
                $subheadline = capiStrTrimAfterWord($aSubheadline[0], CON_SEARCH_MAXLEN_TEASERTEXT);
                
                $cat_id = $oSearchResults->getArtCat($key);
                $similarity = $oSearchResults->getSimilarity($key);

                $similarity = sprintf("%.0f", $similarity);

                #Send output to template
                // this is just for sample client - modify to your needs!
                if ($cfg['url_builder']['name'] == 'front_content') {
                    $aParams = array('lang' => $lang, 'idcat' => $cat_id, 'idart' => $key);
                } else {
                    $aParams = array('search' => array('lang' => $lang, 'idcat' => $cat_id, 'idart' => $key), 
                                    'idcat' => $idcat, // needed to build category path
                                    'lang' => $lang, // needed to build category path
                                    'level' => 1); // needed to build category path
                }
                try {
                    $href = Contenido_Url::getInstance()->build($aParams);
                } catch (InvalidArgumentException $e) {
                    $href = $sess->url("front_content.php?idcat=$cat_id&idart=$key");
                }
                $tpl->set('d', 'more', $sMore);
                $tpl->set('d', 'HREF', $href);
                $tpl->set('d', 'TITLE', mi18n("Link zu Suchergebnis").' '.$i);
                $tpl->set('d', 'NUM', $num);
                $tpl->set('d', 'CATNAME', $headline);
                $tpl->set('d', 'HEADLINE', $text);
                $tpl->set('d', 'SUBHEADLINE', $subheadline);
                $tpl->set('d', 'SIMILARITY', $similarity);
                $tpl->set('d', 'TARGET', '_self');
                $tpl->set('d', 'PUB_DATE', $show_pub_date);
                $tpl->next();
                $i ++;

            }
            $tpl->generate('templates/search_output.html');
        }
    } else {
        #No results
        $tpl->set('s', 'MESSAGE', $sYourSearchFor." '".htmlspecialchars(strip_tags($searchterm))."' ".mi18n("hat leider keine Treffer ergeben").".");
        $tpl->set('s', 'NEXT', '');
        $tpl->set('s', 'PREV', '');
        $tpl->set('s', 'PAGES', '');
        $tpl->set('s', 'result_page', '');
        $tpl->generate('templates/search_output.html');
    }

} else {
    echo '<div id="searchResults">';
    echo '<h1>'.mi18n("Keine Suchergebnisse - Bitte suchen Sie &uuml;ber das Sucheingabefeld!").'</h1>';
    echo '</div>';
}

class Article_Property {
    var $globalConfig;
    var $oDBInstance;

    /**
     * Constructor
     * Hint: Call constructor with Article_Property($db, $cfg);
     * @param  oDBInstance instance of class DB_Contenido
     * @param  globalConfig 
     */
    function Article_Property($oDBInstance, $globalConfig) {
        $this->globalConfig = $globalConfig;
        $this->oDBInstance = $oDBInstance;
    }

    /**
     * Get specification of an article
     * 
     * @param   $iArticleId
     * @return  id of article specification 
     */
    function getArticleSpecification($iArticleId, $iLangId) {

        $sqlString = "   
                    SELECT 
                        artspec
                    FROM 
                        ".$this->globalConfig['tab']['art_lang']."
                    WHERE
                        idart = '".$iArticleId."' AND
                        idlang = '".$iLangId."'
                    ";

        #echo "<pre>$sqlString</pre>";
        $this->oDBInstance->query($sqlString);

        if ($this->oDBInstance->next_record()) {
            return $this->oDBInstance->f('artspec');
        } else {
            return false;
        }
    }
}
?> 
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von kummer » Mi 3. Mär 2010, 08:48

Ich würde mal mit sowas anfangen:

Code: Alles auswählen

$searchterm = urldecode(htmlentities(strip_tags(stripslashes($_GET['searchterm'])), ENT_COMPAT, 'UTF-8'));
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von DerFrank » Mi 3. Mär 2010, 09:14

Halchteranerin hat geschrieben:Komischerweise passiert das aber nicht bei den Überschriften, sondern nur bei den Auszügen aus den Artikeln, die in der Trefferliste angezeigt werden.
Da haben wir es ja jetzt fast geschafft. Im Detail:

(1) Was gibst Du wo ein? Textauszüge werden bei uns meist aus der Zusammenfassung entnommen. Und bei Dir? Also Beispieltext mit Sonderzeichen rein und hier posten.
(2) Welches Modul/Funktion speichert die Daten in die DB. Hier posten.
(3) Dann den passenden Auszug aus der DB. Dann sieht man ganz genau, was Contenido mit den Daten gemacht hat. Hier posten.
(4) Dann das Modul, das die falsche Ausgabe erzeugt. Das haben wir ja jetzt.
(5) Und zum Schluss noch dei falsche Ausgabe selbst. Auch hier posten.

Das machst Du am besten mit nur einem Sonderzeichen. Sagen wir mit dem großen Ä. Nur das Du hier nicht 4.532 Zeichen postest. ^^

Perfekt wäre jetzt noch. Encoding des Mandanten und evtl. ein Encoding im Layout. Also Ausschnitt aus dem Head auch gleich hier posten, falls was drin steht. Und da ich schon Pferde habe kotzen sehen. Den selben Abschnitt des Layouts dann aus dem Frontend. Bei Firefox mit STRG+U und nicht mit Firebug o.ä.

Gruß Frank

PS: never give up. ;)
aitsu open source cms framework für contenido bei googlecode...

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von Halchteranerin » Mi 3. Mär 2010, 15:38

Hello again,

Andreas, dein Änderungsvorschlag hat irgendwie überhaupt keine Sichtbare Änderung bewirkt.
DerFrank hat geschrieben:(1) Was gibst Du wo ein? Textauszüge werden bei uns meist aus der Zusammenfassung entnommen. Und bei Dir?
Der Textauszug ist bei mir einfach der Anfang des Artikels.
DerFrank hat geschrieben:(2) Welches Modul/Funktion speichert die Daten in die DB. Hier posten.
Das ist das Modul "Text":

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Output some HTML text
*
* @version 1.0.0
* @author Rudi Bieller
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2008-04-07
* }}
*
* $Id$
*/

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}

$tpl->reset();
$tpl->set('s', 'text', "CMS_HTML[1]");
$tpl->generate('templates/text_html.html');
?>
DerFrank hat geschrieben:(3) Dann den passenden Auszug aus der DB. Dann sieht man ganz genau, was Contenido mit den Daten gemacht hat. Hier posten.
(5) Und zum Schluss noch dei falsche Ausgabe selbst. Auch hier posten.
Hmm, mal gucken. In con_content steht bei value das:
%3Cp%3E%C4%83%26acirc%3B%26icirc%3B%C5%9F%C5%A3+%C4%82%26Acirc%3B%26Icirc%3B%C5%9E%C5%A2%3C%2Fp%3E
und im Frontend das:
ăâîşţ

Mit einem einzelnen Zeichen hätten wir in con_content z. B. das:
%3Cp%3E%C5%9E%3C%2Fp%3E
und im Frontend das:
Ş
DerFrank hat geschrieben:Perfekt wäre jetzt noch. Encoding des Mandanten und evtl. ein Encoding im Layout.

Bei Administration->Sprachen ist utf-8 als Encoding eingestellt.
Im Quelltext des Frontends steht <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
und im Layout steht nüscht diesbezüglich, d. h. das übernimmt wohl Contenido aus den Mandanten- bzw. Spracheinstellungen.
DerFrank hat geschrieben:PS: never give up. ;)
Es fällt mir schwer. :?
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von DerFrank » Mi 3. Mär 2010, 22:45

Ich schau es mir an. Nur heute nicht mehr. OK?! ;)
aitsu open source cms framework für contenido bei googlecode...

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von Halchteranerin » Sa 6. Mär 2010, 12:20

DerFrank hat geschrieben:Ich schau es mir an. Nur heute nicht mehr. OK?! ;)
Heute vielleicht? :)
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von DerFrank » Mo 8. Mär 2010, 08:16

Halchteranerin hat geschrieben:Das ist das Modul "Text":
Dann wird also url-encodiert. Das ist doch schon einmal ein Anfang.
Halchteranerin hat geschrieben: Hmm, mal gucken. In con_content steht bei value das:
%3Cp%3E%C4%83%26acirc%3B%26icirc%3B%C5%9F%C5%A3+%C4%82%26Acirc%3B%26Icirc%3B%C5%9E%C5%A2%3C%2Fp%3E
und im Frontend das:
ăâîşţ
Das scheint bis hierhin auch noch richtig zu sein. Hast Du das denn (ăâîşţ) im Text-Modul auch eingegeben? Also url-decodiert kommt das raus:

Code: Alles auswählen

<p>ă&acirc;&icirc;şţ Ă&Acirc;&Icirc;ŞŢ</p>
Sorry, ich hab leider nicht allzuviel Zeit.
aitsu open source cms framework für contenido bei googlecode...

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von Halchteranerin » Mo 8. Mär 2010, 09:40

DerFrank hat geschrieben:Hast Du das denn (ăâîşţ) im Text-Modul auch eingegeben?
Wenn ich Texte reinkopiere (aus Word), dann mit ăâîşţ usw. (die Großbuchstaben noch dazu).
Mir fehlt im Moment wirklich der Ansatzpunkt, wonach ich suchen soll. :(
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von DerFrank » Mo 8. Mär 2010, 12:43

Wie aus Word? Das doch dann besser schon mal gar nicht. Meinen Kunden sag ich immer, das sie die Texte aus Word in einen Texteditor, z.B. Notepad, kopieren sollen und von dort aus dann in den Tiny rein. Aber gut. Das soll mal nicht kriegsentscheidend sein. Auf jeden Fall scheinen die Daten in der DB in Ordnung zu sein. Und die Ausgabe dieser Daten scheint auch OK zu sein. Also zumindest in der Artikelansicht. Jetzt würde ich mal schauen, was da im Suchergebnis bei einem var_dump() der betreffenden Stelle raus kommt. Also der Teil, der die Fehl-Zeichen beinhaltet. Und das ohne irgendwelche Manipulationen des Strings. Also kein htmlentities, url_decode usw...
aitsu open source cms framework für contenido bei googlecode...

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: Standard-Suchmodul und UTF-8

Beitrag von Halchteranerin » Mo 8. Mär 2010, 18:29

DerFrank hat geschrieben:Wie aus Word? Das doch dann besser schon mal gar nicht. Meinen Kunden sag ich immer, das sie die Texte aus Word in einen Texteditor, z.B. Notepad, kopieren sollen und von dort aus dann in den Tiny rein.
Mit deutschen Texten mache ich das über UltraEdit, wenn sie keine Tabellen beinhalten, aber der zersägt mir immer die rum. Sonderzeichen. Dass der Notepad das nicht macht, habe ich nicht bedacht. Das Word-HTML habe ich zwar anschließend immer bereinigt, aber ich hatte dann wenigstens meine Sonderzeichen.
DerFrank hat geschrieben:Jetzt würde ich mal schauen, was da im Suchergebnis bei einem var_dump() der betreffenden Stelle raus kommt. Also der Teil, der die Fehl-Zeichen beinhaltet.
Tja, wenn ich das mal lokalisieren könnte ... :oops:
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

Gesperrt