Symfony: адрес электронной почты как параметр запроса

ИМХО логика разрушения должна быть независимой от результатов испытаний.

В идеале, вам следует избегать полностью использовать установку и демонтаж, al xunit.net. См. здесь для получения дополнительной информации.

10
задан pivotal 20 October 2009 в 14:00
поделиться

3 ответа

I don't know what you are doing in Symfony but it may help to be clear that the following is not a valid URL:

example.com/unsubscribe/email/me@example.com

What you almost certainly want (and this is true for all browsers!) is:

http://example.com/unsubscribe/email/me%40example.com

Note: The @ symbol is not safe and must be encoded, the . symbol is safe however (RFC1738). If you don't escape the @ symbol it will almost certainly cause big trouble so (escaping the . almost certainly won't, but you don't need to so I wouldn't).

Problems will occur with not escaping it because @ is reserved as a separator when passing authentication parameters (e.g. http://username:password@hostname.domain/ url / ). Некоторые парсеры URL поймут, что вы действительно хотели набрать% 40, если @ встречается после домена в URL, но другие этого не сделают.

Вместо того, чтобы просто статически кодировать символ @, вам следует использовать одну из функций кодирования URL PHP в адресе электронной почты (например, «$ emailAddress = urlencode ($ emailAddress) ;»), чтобы другие символы в адресе также экранировались должным образом. Не поддавайтесь соблазну отложить это на потом или «после того, как вы заработаете», сделайте это с самого начала и избавьте себя и конечных пользователей от головной боли! : -)

NB: Существует несколько способов кодирования URL-адресов в PHP, поэтому вам нужно будет прочитать страницу документации для urlencode () и сравнить ее с другими подходами, такими как rawurlencode (), чтобы убедиться, что это действительно то, что вам нужно. в вашем случае.

3
ответ дан 3 December 2019 в 23:50
поделиться

Ваша проблема не в правилах перезаписи. Учитывая, что Symfony выбрасывает исключение, запрос направляется в Symfony.

Можете ли вы опубликовать трассировку исключения? Если у вас есть sf_logging_enabled, он должен регистрировать довольно полезную информацию для отладки маршрутизации.

0
ответ дан 3 December 2019 в 23:50
поделиться

По умолчанию Symfony обрабатывает . и / в качестве разделителей параметров.
Это позволяет очень легко сопоставить URL, например:

/some/path/:param.:ext

Но не помогает с адресами электронной почты.

К счастью, вы можете переопределить . разделитель, указав собственный шаблон.
Просто добавьте строку requirements ниже в свой маршрут:

unsubscribeform:
  url:  /unsubscribe/email/:email
  param: { module: subscribe, action: index }
  requirements: { email: .+ }

.+ в требовании — это регулярное выражение, соответствующее чему угодно. . соответствует любому символу, а + означает соответствие одному или нескольким.

(Проверено в Symfony 1.4)

10
ответ дан 3 December 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: