', ':', ';', '(', '&', ')', '$'); // Substitui os caracteres da lista por uma string vazia $stringLimpa = str_replace($caracteresParaRemover, '', $str); return $stringLimpa; } function init() { if(isset($_GET["ark"])){ $ark = $_GET["ark"]; } else { $ark = ""; return ['ok'=>false,'destino'=>'','msg'=>'Nenhum ARK foi passado...','qrark'=> false,'ark_full'=>'', 'tem_interrogacao'=>false]; } //limpar o ARK $ark = limpar_ark($ark); //Eliminando espaços em branco no início e no final do $ark $ark = trim($ark); $qrark = (isset($_GET['qrark']) && $_GET['qrark'] == '1') ? true : false; // Verifique se $ark começa com uma barra. Pois, em vez de terem digitado ark:68745/eM485/B6, por exemplo, podem ter digitado ark:/68745/eM485/B6, o que seria passado para o parâmetro ark com uma barra no início if (strpos($ark, '/') === 0) { // Remova a barra no início $ark= substr($ark, 1); } $tem_interrogacao = false; // remove até 2 interrogações no final e marca flag. Ark para consultar metadados se coloca uma interrogacao no final. Duas interrogacoes verifica a persistencia, o tempo de existencia do ark, mas aqui na Editora Moan nao implementamos isso $ark = rtrim($ark); for ($k = 0; $k < 2; $k++) { if (substr($ark, -1) === '?') { $tem_interrogacao = true; $ark = substr($ark, 0, -1); } } $pedacos = explode("/", $ark); // ARK completo “sem o prefixo ark:” e sem barra inicial, fixo: $ark_full = implode("/", array_filter($pedacos, fn($p) => $p !== '')); $NAAN = $pedacos[0]; //NAAN é o número de registro da Editora Moan na Ark Alliance $ark_sem_NAAN = reduzirArk(count($pedacos), $pedacos); // sem NAAN $ark_base = implode("/", array_slice($pedacos, 1)); if ($ark === '') { return ['ok'=>false,'destino'=>'','msg'=>'ARK vazio.','qrark'=>$qrark,'ark_full'=>'', 'tem_interrogacao'=>false]; } //-------------------------- PREFIXOS ARK -------------------------- $prefixo_editora = "eM"; $prefixo_museu_da_matematica = "M"; $buscar_ark = null; if (str_starts_with($ark_base, $prefixo_editora)) { // Prefixo eM require __DIR__ . '/LogicaPrefixos/processarPrefixo_eM.php'; $buscar_ark = 'processarPrefixo_eM'; } elseif (str_starts_with($ark_base, $prefixo_museu_da_matematica)) { // Prefixo M require __DIR__ . '/LogicaPrefixos/processarPrefixo_M.php'; $buscar_ark = 'processarPrefixo_M'; } else { // Nenhum dos dois } //-------------------------- FIM PREFIXOS ARK -------------------------- if (!is_callable($buscar_ark)) { return ['ok'=>false,'destino'=>'','msg'=>'Prefixo ARK desconhecido.','qrark'=>$qrark,'ark_full'=>$ark_full, 'tem_interrogacao'=>$tem_interrogacao]; } $index = 0; $tamanho_inicial = count($pedacos); //Na verdade o tamanho de $pedacos é fixo. Mais abaixo o valor do tamanho só muda porque precisamos reduzir até encontrar o ark registrado, mas o tamanho real de $pedacos continua o mesmo $identificador_ark = false; $resultado = ['ok'=>false,'destino'=>'','msg'=>'ARK não encontrado.Erro não identificado.','qrark'=>$qrark,'ark'=>$ark_full, 'tem_interrogacao'=>$tem_interrogacao]; do { $resto = ""; $tamanho = count($pedacos) - $index; $inicio_do_resto = $tamanho; if($inicio_do_resto < $tamanho_inicial){ for($i = $inicio_do_resto; $i < $tamanho_inicial; $i++){ $resto.= "/".$pedacos[$i]; }//Fecha for }//Fecha if $ark_sem_NAAN = reduzirArk($tamanho, $pedacos); if($ark_sem_NAAN == ""){ break; } $resultado = $buscar_ark($NAAN, $ark_sem_NAAN, $tem_interrogacao, $resto); $identificador_ark = $resultado["ok"]; $index++; } while ($tamanho > 1 && !$identificador_ark); $resultado['qrark'] = $qrark; $resultado['ark_full'] = $ark_full; // <-- use este no JS/analytics $resultado['tem_interrogacao'] = $tem_interrogacao; return $resultado; }//Fecha a funcao init $conteudo = init(); $ok = $conteudo["ok"]; $destino = $conteudo["destino"]; $msg = $conteudo["msg"]; $arkFull = $conteudo['ark_full'] ?? ''; $qrark = $conteudo["qrark"]; $tem_interrogacao = $conteudo['tem_interrogacao']; function slug_titulo($s) { $s = trim((string)$s); if ($s === '') return ''; // remove acentos $s = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s); $s = strtolower($s); // troca tudo que não é letra/número por hífen $s = preg_replace('/[^a-z0-9]+/', '-', $s); $s = trim($s, '-'); // limita tamanho (pra não virar um trem sem freio) return substr($s, 0, 80); } $tituloSlug = slug_titulo($conteudo['titulo'] ?? ''); ?> <?= $ok ? "Redirecionando…" : "ARK não encontrado" ?>