Enrutador ui angular con parámetro de consulta de URL que contiene un "punto"

En nuestra aplicación Angular tenemos que lidiar con identificaciones que contienen un "punto". Por ejemplo:

book = {
  id: '123.456'
}

Tenemos problemas para usar identificadores como parámetros de URL. Todo funciona bien si la navegación se realiza a través de "Angular", es decir, haciendo clic en el enlace que invoca$state.go('bookDetails', {bookId: book.id});. Pero las cosas no funcionan al recargar la página

"No se puede OBTENER /bookDetails?bookId=123.456"

en el controlador:

$scope.viewBookDetails = function() {
    $state.go('bookDetails', {bookId: book.id});
}

en la vista

<a href="" ng-click="viewBookDetails(); $event.stopPropagation();">

en el enrutador:

.state('bookDetails', {
    url: '/bookDetails?bookId'
}

en el navegador:

https://example.com/bookDetails?bookId=123.456

El enlace funciona si el "punto" se reemplaza con%2E en el navegador

Intentamos reemplazar "punto" con "% 2E" en el parámetro para $ state.go ()

$scope.viewBookDetails = function() {
    $state.go('bookDetails', {bookId: book.id.split('.').join('%2E')});
}

pero no funciona porque el "%" se codifica automáticamente y el "punto" en el navegador se reemplaza por "% 252E"

https://example.com/bookDetails?bookId=123%252E456

Respuestas a la pregunta(3)

Su respuesta a la pregunta