Acabei seguindo o conselho do @Kolya Korobochkin e adicionei versões maiúsculas e minúsculas das regras de reescrita que incluem octetos com escape.
$regular_page_uri = get_page_uri( $page->ID );
$uppercase_page_uri = preg_replace_callback(
'/%[0-9a-zA-Z]{2}/',
create_function( '$x', 'return strtoupper( $x[0] );' ),
$regular_page_uri
);
O plug-in Porcentagem de Codificação da Letra de Capital usa uma abordagem semelhante para converter os octetos em todas as URLs para a versão em maiúsculas. No entanto, o plugin está desatualizado e pode não estar fazendo a conversão em todos os locais necessários. Além disso, acredito que a maioria dos usuários do plug-in em que estou trabalhando não terá URLs com octetos codificados, portanto, executar preg_replace_callback
para todas as URLs é um esforço desnecessário.
O uso de caracteres maiúsculos para representar os octetos é a maneira recomendada de fazer a codificação percentual (consulte RFC3986 , Seção 2.1 ). Portanto, uma solução melhor seria fazer o WordPress atualizar sua função utf8_uri_encode
para escapar dos octetos usando-os. A maioria dos navegadores que testei parece manter o caso original, enquanto outros, como o Safari, convertem para maiúsculas, se tiverem uma chance.