Script Perl pra remover o caractere unicode “byte order mark” (BOM)

Tivemos alguns scripts PHP aqui gerando erro no servidor de homologação por causa de caracteres unicode misteriosos no início do arquivo. Esta marca de ordem de byte é um treco no comecinho do arquivo que de alguma forma diz “em qual das diferentes representações Unicode o texto está codificado.” Só que o PHP não sabe o que é isso, então o servidor simplesmente “cospe” os caracteres pro navegador. Acontece que quando o script PHP tenta modificar os cabeçalhos da requisição (o que precisava ter sido feito antes de o conteúdo ser enviado), o servidor chora: "Warning: Cannot modify header information - headers already sent by (output started at [...]/functions.php:1) in [...]/whatever.php on line [whatever line number]"

Você abre o script no editor e provavelmente ele aparece bonitinho, porque o editor sabe ignorar o BOM causador de confusão. Aí você não sabe o que fazer e senta na calçada e entra em depressão. CALMA! Garimpei por aí, não me lembro mais onde, um scriptzinho Perl maroto que remove a tranqueira do BOM:

#!/usr/bin/perl

$num_args = $#ARGV + 1;
if ($num_args != 1) {
  print "\nUsage: naobom.pl filename\n";
  exit;
}

$filename=$ARGV[0];
open(FILE, $filename) || die("Cannot open file $filename for reading.");
@file=;
$file[0] =~ s/^\xEF\xBB\xBF//;
close(FILE);

open(FILE, ">>$filename") || die("Cannot open file $filename for writing.");
print FILE @file;
close(FILE);

print "\nDone.\n";

Ele sobrescreve o arquivo, porque eu gosto de viver perigosamente. Aprecie com moderação. Use por sua conta e risco. Com grandes poderes, grandes responsabilidades. Et cetera.

Atualização: agora no github pra quem quiser colaborar. 😉

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s