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-Key: 142606

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

Printed on: April 16, 2024 at 15:04 o'clock

Mitglied: 77559
77559 May 11, 2010 at 10:41:25 (UTC)
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
Member: zepho
zepho May 11, 2010 at 10:58:04 (UTC)
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
Member: dog
dog May 11, 2010 at 11:14:30 (UTC)
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)
Member: zepho
zepho May 11, 2010 at 11:17:18 (UTC)
Goto Top
sorry da hast du dich verlesen....
"Ich verwende weder Signierung noch BOM..."
Member: dog
dog May 11, 2010 at 11:26:29 (UTC)
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.
Member: zepho
zepho May 11, 2010 at 11:35:18 (UTC)
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