Seite 1 von 2

leidige Thema ä,ö, ü, ß ersetzen

Verfasst: 14.10.2010, 18:42
von conny2540
Ich bin kein Programmierer und habe ein script welches keywords generiert aus einem text. Ich habe mir das Script mal angesehen und folgende Passage gefunden:

Code: Alles auswählen

// some cleanup
		$str = ' '. $str .' '; // pad that is necessary
		$str = preg_replace('#\ [a-z]{1,2}\ #i', ' ', $str); // remove 2 letter words and numbers
		$str = preg_replace('#[0-9\,\.:]#', '', $str); // remove numerals, including commas and dots that are part of the numeral
		$str = preg_replace("/([a-z]{2,})'s/", '\\1', $str); // remove only the 's (as in mother's)
		$str = str_replace('-', ' ', $str); // remove hyphens (-)
nun möchte ich das erweitern um die Ersetzung von den umlauten auf ae, oe, ue und ss. Leider klappt es nicht. Kann mir bitte jemand helfen ?

Ich habe es damit probiert, aber da passiert rein garnichts:

Code: Alles auswählen

$str = str_replace('/ä/', 'ae', $str);
        $str = str_replace('/ü/', 'ue', $str);
        $str = str_replace('/ö/', 'oe', $str);
        $str = str_replace('/ß/', 'ss', $str);
[/code]

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 14.10.2010, 18:56
von conny2540
Vielleicht kann man auch mit dieser Passage etwas anfangen:

Code: Alles auswählen


function process_text ($str) {

		if (preg_match('/^\s*$/', $str)) return false;

		// strip HTML
		$str = $this->html2txt($str);


		//convert all characters to lower case
        $str = mb_strtolower($str, $this->encoding);

Verfasst: 15.10.2010, 01:28
von xlb
N'Abäänd ...

Code: Alles auswählen

$str = str_replace('/ä/', 'ae', $str);
        $str = str_replace('/ü/', 'ue', $str);
        $str = str_replace('/ö/', 'oe', $str);
        $str = str_replace('/ß/', 'ss', $str);
Was sollen die Slashes? Mal ein Beispiel ...

Code: Alles auswählen

$TXT_1='ä ß ö ü';      

$TXT_2=str_replace(array('ä','ü','ö','ß'),array('ae','ue','oe','ss'),$TXT_1);  

echo $TXT_2; 

Verfasst:
von

Verfasst: 15.10.2010, 06:28
von e-fee
Mmh, die Slashes nennen sich Delimiter und sind an sich schon richtig - wenn man die Funktion preg_replace nutzt.

Verfasst: 15.10.2010, 06:33
von conny2540
Moin,

sorry ich bin wirklich kein Programmierer. Ich habe es versucht ohne slashes und auch 1:1 Deinen Code zu übernhmen. Nach wie vor werden die umlaute einfach weggeschluckt.

Also so: anstatt künstlich, steht knstlich.

Woran kann das liegen, bzw. wie bekomme ich das hin ? Eigenartigerweise werden die Titel und auch meta-description richtig umgesetzt, nur bei den keywords, da werden Sonderzeichen verschluckt.

Der ganze block mit den Keywords lautet so:

Code: Alles auswählen

	function get_keywords () {

		if ($this->contents === false) return '';

		$onew_arr = $this->parse_words();

		$twow_arr = $this->parse_2words();

		$thrw_arr = $this->parse_3words();

		// remove 2-word phrases if same single words exist
		if ($onew_arr !== false && $twow_arr !== false) {
			$cnt = count($onew_arr);
			for &#40;$i = 0; $i < $cnt-1; $i++&#41; &#123;
				foreach &#40;$twow_arr as $key => $phrase&#41; &#123;
					if &#40;$onew_arr&#91;$i&#93; .' '. $onew_arr&#91;$i+1&#93; === $phrase&#41; unset&#40;$twow_arr&#91;$key&#93;&#41;;
					&#125;
				&#125;
			&#125;

		// remove 3-word phrases if same single words exist
		if &#40;$onew_arr !== false && $thrw_arr !== false&#41; &#123;
			$cnt = count&#40;$onew_arr&#41;;
			for &#40;$i = 0; $i < $cnt-2; $i++&#41; &#123;
				foreach &#40;$thrw_arr as $key => $phrase&#41; &#123;
					if &#40;$onew_arr&#91;$i&#93; .' '. $onew_arr&#91;$i+1&#93; .' '. $onew_arr&#91;$i+2&#93; === $phrase&#41; unset&#40;$thrw_arr&#91;$key&#93;&#41;;
					&#125;
				&#125;
			&#125;

		// remove duplicate ENGLISH plural words
		if &#40;$this->lang == 'en'&#41; &#123;
			if &#40;$onew_arr !== false&#41; &#123;
				$cnt = count&#40;$onew_arr&#41;;
				for &#40;$i = 0; $i < $cnt-1; $i++&#41; &#123;
					for &#40;$j = $i+1; $j < $cnt; $j++&#41; &#123;
						if &#40;array_key_exists&#40;$i, $onew_arr&#41; && array_key_exists&#40;$j, $onew_arr&#41;&#41; &#123;
							if &#40;$onew_arr&#91;$i&#93;.'s' == $onew_arr&#91;$j&#93;&#41; unset&#40;$onew_arr&#91;$j&#93;&#41;;
							if &#40;array_key_exists&#40;$j, $onew_arr&#41;&#41; &#123;
								if &#40;$onew_arr&#91;$i&#93; == $onew_arr&#91;$j&#93;.'s'&#41; unset&#40;$onew_arr&#91;$i&#93;&#41;;
								&#125;
							&#125;
						&#125;
					&#125;
				&#125;
			&#125;

		// ready for output - implode arrays
		if &#40;$onew_arr !== false&#41; &#123;$onew_kw = implode&#40;',', $onew_arr&#41; .',';&#125;
		else &#123;$onew_kw = '';&#125;
		
		if &#40;$twow_arr !== false&#41; &#123;$twow_kw = implode&#40;',', $twow_arr&#41; .',';&#125;
		else &#123;$twow_kw = '';&#125;
		
		if &#40;$thrw_arr !== false&#41; &#123;$thrw_kw = implode&#40;',', $thrw_arr&#41; .',';&#125;
		else &#123;$thrw_kw = '';&#125;
		
		$keywords = $onew_kw . $twow_kw . $thrw_kw;
		return rtrim&#40;$keywords, ','&#41;;
		&#125;


	///////////////////////////////////////////////////////////////////////////////////////
	
	function process_text &#40;$str&#41; &#123;

		if &#40;preg_match&#40;'/^\s*$/', $str&#41;&#41; return false;

		// strip HTML
		$str = $this->html2txt&#40;$str&#41;;

   		//convert all characters to lower case
        $str = mb_strtolower&#40;$str, $this->encoding&#41;;

		// some cleanup
		$str = ' '. $str .' '; // pad that is necessary
		$str = preg_replace&#40;'#\ &#91;a-z&#93;&#123;1,2&#125;\ #i', ' ', $str&#41;; // remove 2 letter words and numbers
		$str = preg_replace&#40;'#&#91;0-9\,\.&#58;&#93;#', '', $str&#41;; // remove numerals, including commas and dots that are part of the numeral
		$str = preg_replace&#40;"/&#40;&#91;a-z&#93;&#123;2,&#125;&#41;'s/", '\\1', $str&#41;; // remove only the 's &#40;as in mother's&#41;
		$str = str_replace&#40;'-', ' ', $str&#41;; // remove hyphens &#40;-&#41;
      
Ergänzend dazu: überall ist UTF-8 angegeben. weiss nicht ob das eine Auswirkung hat. Bin leider nur User.

Verfasst: 15.10.2010, 06:40
von conny2540
Habe mir auch noch die Parameter-code herausgesucht. Vl. ist hier auch was falsch:

Code: Alles auswählen

///////////////////////////////////////////////////////////////////////////////////////
    function autokeyword &#40;$params&#41; &#123;

      if &#40;isset&#40;$params&#91;'common'&#93;&#41;&#41; &#123;
            $this->common = $params&#91;'common'&#93;;
            &#125;
        else &#123;
            // if not set, use this default
            $this->common = "";
            &#125;

        // language or default language; if not defined
        if &#40;!isset&#40;$params&#91;'lang'&#93;&#41;&#41; $this->lang = 'de';
        else $this->lang = strtolower&#40;$params&#91;'lang'&#93;&#41;; // case insensitive

        // multibyte internal encoding
        if &#40;!isset&#40;$params&#91;'encoding'&#93;&#41;&#41; $this->encoding = 'UTF-8';
        else $this->encoding = strtoupper&#40;$params&#91;'encoding'&#93;&#41;; // case insensitive
        mb_internal_encoding&#40;$this->encoding&#41;;

        // languages to ignore
        if &#40;isset&#40;$params&#91;'ignore'&#93;&#41; && is_array&#40;$params&#91;'ignore'&#93;&#41;&#41; $this->ignore = $params&#91;'ignore'&#93;; // array of language codes
        else $this->ignore = false;

        // clean up input string; break along punctuations; explode into array
        if &#40;$this->ignore !== false && in_array&#40;$this->lang, $this->ignore&#41;&#41; $this->contents = false; // language to be ignored
        else $this->contents = $this->process_text&#40;$params&#91;'content'&#93;&#41;;

Verfasst: 15.10.2010, 09:19
von nerd
warum ersetzt du die umlaute nicht mit den html sonderzeichen wie es korrekt waere? dafuer gibts htmlentities() ....

Verfasst: 15.10.2010, 09:40
von conny2540
Sorry, das ist mir zu hoch. Ich bin kein Programmierer. Ich versuche nur ein Script anzupassen und habe nur HTMl-Grundkenntnisse. Keine Ahnung was htmlentities() sind... Das script ist ein php standard-script und übergibt leider nur in den keywords die umlaute nicht. Da diese automatisch aus dem content generiert werden, muss ich auch in diesen Script eingreifen. Oder ich ändere das alles wieder auf Standard ab und tippe mir die keywords selbst ein in dem Feld was dafür vorgesehen ist im Back-End.

Andere Möglichkeit ist auf die keywords überhaupt zu verzichten, denn ich habe den Eindruck, dass Google sich dafür sowieso nicht interessiert und vielmehr den Titel-Tag und die meta-description als wichtig heranzieht. Denn ich habe Seiten die super ranken und absolut keine keywords enthalten, aber URL, meta-titel und meta-description ist optimiert.

Täusche ich mich da oder ist das reiner Zufall ? sonst lasse ich das mit der Anpassung, weil ohne professioneller Hilfe bekomme ich das eh nicht hin.

Verfasst: 15.10.2010, 10:01
von chris21
Meta Keywords sind für Google irrelevant. Vernünftiger Titel und Description (auch bzgl. Erregung der Aufmerksamkeit in den SERPs bzgl. des Nutzers) sind relevant.

Verfasst: 15.10.2010, 10:43
von xlb
Moinsen.

Hab "meinen" Code gerade mal ausprobiert, funktioniert einwandfrei!
überall ist UTF-8 angegeben. weiss nicht ob das eine Auswirkung hat
Ja, hat es! Bist du sicher, dass alle Content/Text-Ressourcen auf UTF-8 getrimmt sind? (auch der PHP-Quellcode?)
warum ersetzt du die umlaute nicht mit den html sonderzeichen wie es korrekt waere? dafuer gibts htmlentities() ....
Dafür gibt's UTF-8. Hält man sich konsequent an die Codierung, sind Entities überflüssig.
e-fee hat geschrieben:Mmh, die Slashes nennen sich Delimiter und sind an sich schon richtig - wenn man die Funktion preg_replace nutzt.
Wenn man preg_replace() und RegEx verwendet, machen "Delimiter" Sinn - schon richtig. Bei str_replace(), das hier sinnvollerweise zum Einsatz kommt, gibt's deren nicht.
Meta Keywords sind für Google irrelevant
Wenn ich mich recht entsinne, läuft da gerade ein Experiment bei einem Foren-Mitglied. Da könnte das letzte Wort noch nicht gesprochen sein ... - aber wer weis schon, was "G" so treibt ...?!

Verfasst: 15.10.2010, 13:09
von conny2540
JA ich bin mir sicher dass da alles UTF-8 getrimmt ist. Jede PHP-Datei die ich jetzt bezüglich lang in die Hand bekommen habe gibt das auch weiter.

Das mit den Keywords weiss ich auch nicht so genau, aber es ist schon witzig, dass einige Seiten ohne jeglichen Keywords besser ranken. Ist nur eine Beobachtung meinerseits, aber ich kann es auch nicht beschwören, da ich kein Optimierer bin, der Experimente macht.

Und was G so treibt, das weiss keiner so richtig...

Ich habe jetzt einmal den Developer des SEO-Moduls angeschrieben und bin gespannt auf seine Antwort, denn es ist schon eigen, dass Meta-Title und MEta-Description aus dem gleichen Modul richtig angesprochen werden, aber die Keywords verstümmelt werden. Das verstehe ich selbst auch nicht warum.

Verfasst: 22.11.2010, 10:25
von daberlo
Sry das ich das " ältere" Thema ausgrabe, aber vllt. interessierts ja jemand.

utf8_decode / utf8_encode (PHP) könnten hier an mancher Stelle hilfreiche Ansätze sein ;)

Verfasst: 22.11.2010, 10:41
von Synonym
utf8_decode / utf8_encode (PHP) könnten hier an mancher Stelle hilfreiche Ansätze sein
Aber nur dann, wenn man die Codierung nicht konsequent umsetzt, hatte xlb aber oben schon gesagt / gefragt.

Verfasst: 22.11.2010, 11:39
von conny2540
Danke, Problem war ein Anderes. Das Script war nur vorbereitet, aber wurde nicht auf die Deutschen Sonderzeichen getrimmt. Der Coder hat es mittlerweile repariert.

Verfasst: 22.11.2010, 11:44
von Synonym
Was sich dann aber mit dem widerspricht:
JA ich bin mir sicher dass da alles UTF-8 getrimmt ist.