Как бы я соответствовал правильной хэш-паре на основе определенной строки? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть простой скрипт отслеживания посещений страницы, который позволяет выводу отображать понятные имена вместо URL с помощью хеша.

ОБНОВЛЕНИЕ: Я использовал php для генерации хеша ниже, но использовал неправильное динамическое имя страницы item.html. При изменении на правильное имя скрипт возвращает желаемые результаты. Приносим извинения за потраченное время.

my %LocalAddressTitlePairs = (
'https://www.mywebsite.com/index.html' => 'HOME', 
'https://www.mywebsite.com/art_gallery.html' => 'GALLERY', 
'https://www.mywebsite.com/cart/item.html?itemID=83&cat=26' => 'Island Life',
'https://www.mywebsite.com/cart/item.html?itemID=11&cat=22' => 'Castaways',
'https://www.mywebsite.com/cart/item.html?itemID=13&cat=29' => 'Pelicans',
and so on..
);

Код для возврата обращений к странице:

sub url_format {
local $_ = $_[0] || '';
if ((m!$PREF{'My_Web_Address'}!i) and  (m!^https://(.*)!i)    ) {
    if ($UseLocalAddressTitlePairs == 1) {
    foreach my $Address (keys %LocalAddressTitlePairs) {
    return "<a title=\"$Address\" href=\"$_\">$LocalAddressTitlePairs{$Address}</A>" if (m!$_$! eq m!$Address$!);
    }
    }
    my $stub =$1;
    return $stub;
    } 
}

При отображении совпадений в журнале будет отображаться HOME с правильной ссылкой, GALLERY с правильной URL-ссылкой. , но https://www.mywebsite.com/cart/item.html?itemID=83&cat=26 будет отображать случайное имя вместо того, каким оно должно быть, Island Life для этой страницы ... у него правильная ссылка, - при каждой загрузке страницы отображается другое имя. И выходные данные для всех страниц со строками запроса будут отображать одно и то же имя. Я знаю, что ссылки являются правильными, щелкая по страницам сайта и проверяя скрипт журнала для моих собственных посещений страницы. Я попытался -

while (my($mykey, $Value) = each %LocalAddressTitlePairs) {
return "<a title=\"$mykey\" href=\"$_\">$Value</a>" if(m!$_$! eq m!$mykey$!);

, но опять-таки ссылка верна, но связанное с mykey / Value тоже случайно. Слишком новый для Perl, чтобы понять это, но я провожу много онлайн исследований.

1 Ответ

2 голосов
/ 28 октября 2019

m!$Address$! не работает должным образом, потому что выражение содержит специальные символы, такие как ? Вам необходимо добавить escape-последовательности \Q и \E

m!\Q$Address\E$!

, еще лучше добавитьпроверка в начале строки, в противном случае

my $url = "https://www.mywebsite.com/?foo=bar"
my $bad_url = "https://bad.com?u=https://www.mywebsite.com/?foo=bar"
$bad_url =~ m!\Q$url\E$! ? 1 : 0 # 1, pass
$bad_url =~ m!^\Q$url\E$! ? 1 : 0 # 0, fail
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...