zepho
Goto Top

Textdateien nach Zeichenkodierung-Zeichensatz suchen

Kennt wer ein Suchprorgamm unter Win, das nach Zeichenkodierungen sortiert?

Guten Tag,
da sich in einem meiner größeren PHP-Projekte Ansi-kodierte Dateien unter meine UTF-8 Files gemischt haben, wollte ich alle ANSI-Textdateien suchen, finde aber kein passendes Tool dazu
Hat jemand einen Tipp / Empfehlung?

Content-ID: 142606

Url: https://administrator.de/contentid/142606

Ausgedruckt am: 26.11.2024 um 13:11 Uhr

77559
77559 11.05.2010 um 12:41:25 Uhr
Goto Top
Hallo zepho,

sind die Dateien denn entsprechend getaggt, oder wäre das nur aus dem Inhalt erkenntlich?
Da ANSI und UTF-8 im Bereich von 0-127 identisch mit ASCII sind, kann man es dann nur an gfs vorhandenen Umlauten oder sonstigen Bekannten Sonderzeichen erkennen.

Gruß
LotPings
zepho
zepho 11.05.2010 um 12:58:04 Uhr
Goto Top
Ich verwende weder Signierung noch BOM, wenn du das mit taggen meinst.
Da es sich um Klassen handelt, die gut kommentiert sind und auch in Deutsch, gehen ich davon aus, dass zumindest Umlaute vorhanden sind.
Andernseits habe ich gerade eine kleinere Datei ohne Umlaute geöffnet, die als UTF8 erkannt wird. Ich denke also nicht, dass es daran liegt.

Ich finde auch kein Suchtool bei google, bin ich auf ein schwarzes Loch gestoßen? Muss ich jetzt alles per Hand machen? face-sad
dog
dog 11.05.2010 um 13:14:30 Uhr
Goto Top
Naja, wenn deine Dateien eine BOM haben sind die Anderen doch leicht zu finden.

<?php

	function findNonBOMRecursive($startDir,&$outArray)
	{
		if($startDir[strlen($startDir)-1] != '/')  
			$startDir .= '/';  
			
		$files = glob($startDir.'*');  
		
		foreach ($files as $file) {
			
			if(is_dir($file)) {
				findNonBOMRecursive($file,$outArray);
				continue;
			}
			
			if(!preg_match('/\.php$/iD', $file))  
				continue;
			
			$fh = fopen($file,'r');  
			$top = fread($fh, 3);
			fclose($fh);
			
			if($top != "\xEF\xBB\xBF")  
				$outArray = $file;
		}
	}
	
	$files = array();
	
	findNonBOMRecursive('/my/project',$files);  
	
	print_r($files);

?>
(Nur so aus dem Kopf)
zepho
zepho 11.05.2010 um 13:17:18 Uhr
Goto Top
sorry da hast du dich verlesen....
"Ich verwende weder Signierung noch BOM..."
dog
dog 11.05.2010 um 13:26:29 Uhr
Goto Top
Na gut, dann bleibt dir nur übrig in der Datei nach UTF8-Zeichen zu suchen:

<?php

	function findNonUTF8Recursive($startDir,&$outArray)
	{
		if($startDir[strlen($startDir)-1] != '/')  
			$startDir .= '/';  
			
		$files = glob($startDir.'*');  
		
		foreach ($files as $file) {
			
			if(is_dir($file)) {
				findNonBOMRecursive($file,$outArray);
				continue;
			}
			
			if(!preg_match('/\.php$/iD', $file))  
				continue;
			
			$cont = file_get_contents($file);
			
			if(strpos($cont, "\xC3\xBC") || //ü  
			   strpos($cont, "\xC3\xA4") || //ä  
			   strpos($cont, "\xC3\xB6") || //ö  
			   strpos($cont, "\xC3\x9F")    //ß   
			)
				continue;
			
			$outArray = $file;
		}
	}
	
	$files = array();
	
	findNonUTF8Recursive('/my/project',$files);  
	
	print_r($files);

?>
Natürlich findest du so keine Dateien mit gemischtem Encoding.
zepho
zepho 11.05.2010 um 13:35:18 Uhr
Goto Top
hmm, okay. In meinem Fall müsste man glob noch auf php,htm/l und css,js beschränken.

Aber ich denke mir wird wohl nichts anderes übrig bleiben, als das ganz in php zu lösen. Da ich meine Update-Pakete auch mit PHP erstelle könnte ich ggf. eine Art Enkontrolle einbauen...mal sehen...

Danke für deine schnelle Vorlage, ich werd mein Projekt erstmal sichern und ein wenig basteln, da mein Akku aber bei 10% steht (schon 32 h wach) melde ich mich morgen nochmal hierzu.

Schönen Tag noch und Danke