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

<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>

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

Сообщение об ошибке парсера: «55.00000» недействительно в начале блока кода.  Действительны только идентификаторы, ключевые слова, комментарии, "(" и "{". Что мне не хватает?

16
Sam 28 Май 2014 в 12:09
 – 
DavidG
28 Май 2014 в 12:14

5 ответов

Лучший ответ

Попробуйте использовать &#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>
29
pbjork 28 Май 2014 в 12:17

Интересно, почему никто не предлагает использовать закодированный в 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/

9
Sebastian 20 Янв 2017 в 13:56
Ответ @ работал; %40 нет, для этого URL-адреса в теге на странице .cshtml: cdn.jsdelivr.net/npm/@mdi/font@4.x/css/…
 – 
pettys
9 Фев 2021 в 20:49

Просто другой способ:

<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>
6
Sebastian 20 Янв 2017 в 14:25

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

В моем случае использования у меня есть партиал с активами, которые следует заменить задачей 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="https://www.google.co.uk/maps/place/XXXXXXXXXXXXXXXX/@(location),17z/data=!3m1!4b1!4m2!3m1!1s0x487e736c74d13649:0xe560f3b38693aec3">View on Google Maps</a>
1
Sebastian 20 Янв 2017 в 14:26

Самое простое решение этой проблемы — использовать @@ вместо @.

Именно так MS рекомендует экранировать один @.

0
Kieran Foot 17 Апр 2022 в 15:45