Как вы избегаете символа "@" внутри URL-адреса с бритвой

Я знаю, что это, вероятно, будет что-то очень простое, и это похоже на "gotcha", который мне еще предстоит получить; однако я боролся с тем, чтобы избежать символа @ в следующем URL-адресе.

<a href="#" onclick="location.href='https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/@55.000000,-1.000000,17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3'; return false;">View on Google Maps</a>

Я уже пробовал ускользнуть от него со вторым @ i.e.

<a href="#" onclick="location.href='https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/@@55.000000,-1.000000,17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3'; return false;">View on Google Maps</a>

Тем не менее это создает следующий YSOD

Parser Error Message: "55.00000" is not valid at the start of a code block.  Only identifiers, keywords, comments, "(" and "{" are valid. Что мне не хватает?

Ответ 1

Попробуйте использовать &#64; вместо фактического @

<a href="https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/&#64;55.000000,-1.000000,17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3">View on Google Maps</a>

Ответ 2

Интересно, почему никто не предлагает использовать символ с кодировкой url %40 для @?

<a href="https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/%4055.000000,-1.000000,17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3">View on Google Maps</a>

Для меня это работает.

http://meyerweb.com/eric/tools/dencoder/

Ответ 3

Еще один способ:

<a href="https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/@("@55.000000,-1.000000"),17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3">View on Google Maps</a>

или

<a href="https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/@("@")55.000000,-1.000000,17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3">View on Google Maps</a>

Ответ 4

Я нашел другое (возможно, в лучшем случае) способ избежать @ -символов в шаблонах бритвы.

В моей учетной записи у меня есть частичное с активами, которые должны быть заменены на usemin grunt-task. При ссылке на пакет npm, в строке пути есть @.

@using Foo.Bar.Helpers

@{ 
    var somescope = "@somescope";
}

@Html.RegisterAssetBlock(
    content: @<text>
        <!-- build:js /assets/js/bundle.js -->
        <script src="/node_modules/@somescope/somepackage/dist/main.js" type="text/javascript"></script>
        <!--endbuild-->
    </text>
)

Таким образом, в каждом случае существует правильная строка (клиент время компиляции и сервер)

Для вашего случая это будет означать следующее:

@using Foo.Bar.Helpers

@{
    var location = "@55.000000,-1.000000";
}

<a href="#" onclick="location.href='https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/@(location),17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3'; return false;">View on Google Maps</a>