Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

türkische zeichen umwandeln

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
DJTonic
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 18.03.2005, 05:27

Beitrag von DJTonic » 25.08.2006, 23:30

ich sitze hier gerade an einem problem, an dem ich mir irgendwie die zähne ausbeisse.

nehmen wir an ich habe einen türkischen städtenamen:
Çığlık

diese sonderzeichen möchte ich in "deutsche" zeichen umwandeln.

aus Çığlık soll also Ciglik werden.

leider ist mein problem nicht nur auf türkisch beschränkt. hat da jemand einen ansatz?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 00:13

Code: Alles auswählen

$from = 'àáâãåçèéêëìíîïñòóôõøšùúû';
$to   = 'aaaaaceeeeiiiinooooosuuu';
$clean_string = strtr($string, $from, $to);
$from enthält die türkischen Zeichen (einfach alles reinmachen was du findest), $to die saubere Entsprechnung. Ob es eine Lösung über reguläre Ausdrücke gibt weiss ich nicht. strtr ist wunderbar schnell.

strtr() hilft auch wenn du Œ durch OE ersetzen musst, einfach nur 2 Parameter benutzen wobei das zweite ein Array ist das im Schlüssel das zu ersetzende, im Wert das ersetzende Zeichen enthält.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 00:16

Ach ja, wäre nett wenn du die Ersetzungsliste hier dann ggf. posten könntest :)

DJTonic
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 18.03.2005, 05:27

Beitrag von DJTonic » 26.08.2006, 11:36

danke für deinen code jan. leider haben wir wohl aneinander vorbeigeredet :-)
diesen code hätte ich schon eingesetzt, ich wollte es halt vermeiden, dutzende zeichensätze nach allen zeichen mit einem zusatzkringel zu durchsuchen :wink:
(weil: problem ist generell und nicht auf türkisch beschränkt)

wird mir wohl dann nix anderes übrig bleiben, sofern nicht schonmal wer das gemacht hat :cry:

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 13:09

Zeichentabellen sollten sich im Netz finden lassen. Deine Aufgabe besteht dann nur darin, die sauberen Ersetzungen zusammenzusammeln.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 17:25

Also ich habe noch ein wenig gesucht. Eine Idee ist den String erst durch htmlentities laufen zu lassen und dann zu ersetzen, finde ich gar nicht so doof:

https://de3.php.net/manual/de/function. ... .php#68480
https://de3.php.net/manual/de/function. ... .php#51262

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 17:28

Wordpress geht den heftigeren Weg um Titel von Postings in Strings zu verwandeln die in URLs nutzbar sind, hier die wichtigsten (soweit ich das überblicke, der Wordpresscode ist nicht gerade ein Meisterwerk...) Funktionen:

Code: Alles auswählen

function remove_accents($string) {
	if (seems_utf8($string)) {
		$chars = array(
		// Decompositions for Latin-1 Supplement
		chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
		chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
		chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
		chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
		chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
		chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
		chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
		chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
		chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
		chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
		chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
		chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
		chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
		chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
		chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
		chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
		chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
		chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
		chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
		chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
		chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
		chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
		chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
		chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
		chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
		chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
		chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
		chr(195).chr(191) => 'y',
		// Decompositions for Latin Extended-A
		chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
		chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
		chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
		chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
		chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
		chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
		chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
		chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
		chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
		chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
		chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
		chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
		chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
		chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
		chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
		chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
		chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
		chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
		chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
		chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
		chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
		chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
		chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
		chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
		chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
		chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
		chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
		chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
		chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
		chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
		chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
		chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
		chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
		chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
		chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
		chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
		chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
		chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
		chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
		chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
		chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
		chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
		chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
		chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
		chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
		chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
		chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
		chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
		chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
		chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
		chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
		chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
		chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
		chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
		chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
		chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
		chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
		chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
		chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
		chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
		chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
		chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
		chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
		chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
		// Euro Sign
		chr(226).chr(130).chr(172) => 'E');

		$string = strtr($string, $chars);
	} else {
		// Assume ISO-8859-1 if not UTF-8
		$chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158)
			.chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194)
			.chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202)
			.chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210)
			.chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218)
			.chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227)
			.chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235)
			.chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243)
			.chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251)
			.chr(252).chr(253).chr(255);

		$chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";

		$string = strtr($string, $chars['in'], $chars['out']);
		$double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254));
		$double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th');
		$string = str_replace($double_chars['in'], $double_chars['out'], $string);
	}

	return $string;
}

function sanitize_title($title, $fallback_title = '') {
	$title = strip_tags($title);
	$title = apply_filters('sanitize_title', $title);

	if (empty($title)) {
		$title = $fallback_title;
	}

	return $title;
}

function sanitize_title_with_dashes($title) {
	$title = strip_tags($title);
	// Preserve escaped octets.
	$title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
	// Remove percent signs that are not part of an octet.
	$title = str_replace('%', '', $title);
	// Restore octets.
	$title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);

	$title = remove_accents($title);
	if (seems_utf8($title)) {
		if (function_exists('mb_strtolower')) {
			$title = mb_strtolower($title, 'UTF-8');
		}
		$title = utf8_uri_encode($title);
	}

	$title = strtolower($title);
	$title = preg_replace('/&.+?;/', '', $title); // kill entities
	$title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
	$title = preg_replace('/\s+/', '-', $title);
	$title = preg_replace('|-+|', '-', $title);
	$title = trim($title, '-');

	return $title;
}

DJTonic
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 18.03.2005, 05:27

Beitrag von DJTonic » 26.08.2006, 17:38

so, ich werd mein problem jetzt nochmal spezifizieren und danach deine beiden methoden testen:
ich bekomme den ortnamen im QUELLTEXT so:
Çığlık

im BROWSER sieht es so aus:
Çığlık

logisch, da wirds ja utf-8 angezeigt

folglich funktioniert dein allererster ansatz mit strstr nicht.

der wordpressansatz sieht aber schonmal gut aus, den teste ich jetzt mal.

edit: der wordpress-workaround funktioniert perfekt.
jan, ich liebe dich :lol: :lol: :lol:
Zuletzt geändert von DJTonic am 26.08.2006, 17:41, insgesamt 1-mal geändert.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 17:41

Hier findet sich ein regulärer Ausdruck um alle non-ASCII / non-ISO-8859-1 - Zeichen zu filtern:
https://www.sitepoint.com/forums/showth ... ost1864683

Fehlt "nur" die Ersetzung...

DJTonic
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 18.03.2005, 05:27

Beitrag von DJTonic » 26.08.2006, 17:50

um dann zum krönenden abschluss aus dem wordpress-funktion noch die deutschem umlaute nicht umwandeln zu lassen, hier die chars die man beim
// Decompositions for Latin-1 Supplement
-Teil rauslöschen sollte:

ü 195 188
Ü 195 156
ä 195 164
Ä 195 132
ö 195 182
Ö 195 150
ß 195 159

diese kann man dann wiederrum mit utf8_encode umwandeln.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 17:58

Na das ist doch schonmal was.

Jetzt nur hoffen, dass da alle Zeichen abgedeckt sind. Man könnte mal rausfinden, wer die Funktion geschrieben hat bzw wo die Wordpress-Macher sie geklaut haben. Vielleicht gibt es schon verbesserte und erweiterte Versionen.

DJTonic
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 18.03.2005, 05:27

Beitrag von DJTonic » 26.08.2006, 18:26

ob das alles abdeckt werde ich in kurzer zeit wissen :lol:

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag