Используйте кештег со знаком доллара $, а также хэштег # [закрыто]
Вопрос
Хорошо, я хочу использовать как знак доллара $ (кэштег), так и хэштег # для следующего кода.Код ниже - это то, что я пытался использовать...
Это ОРИГИНАЛЬНЫЙ КОД:
// Hashtags and @Mentions
$str = preg_replace_callback('~([#@])([^\s#@]+)~',
create_function('$m', '$dir = $m[1] == "#" ? "search/?q=%23" : "./";' .
'return "<a href=\"$dir$m[2]\">$m[0]</a>";' ),
$str );
/* Link text */
$str = self :: linkText( $str );
/* Emoticons */
$str = self :: emoticons( $str );
$str = stripslashes( $str );
//$str = str_replace( '<br />', '<br />', $str );
//return wordwrap( $str, 60, "\r\n", TRUE );
return $str;
}
Это моя ОТРЕДАКТИРОВАННАЯ ВЕРСИЯ:
// Hashtags and @Mentions
$str = preg_replace_callback('~([#@$])([^\s#@$]+)~',
create_function('$m', '$dir = $m[1] == "#" ? "search/?q=%23,%24" : "./";' .
'return "<a href=\"$dir$m[2]\">$m[0]</a>";' ),
$str );
/* Link text */
$str = self :: linkText( $str );
/* Emoticons */
$str = self :: emoticons( $str );
$str = stripslashes( $str );
//$str = str_replace( '<br />', '<br />', $str );
//return wordwrap( $str, 60, "\r\n", TRUE );
return $str;
}
Я добавил «$» и %24 к приведенному выше коду...дело в том, что "оригинальный"Код работает правильно и создает такой URL-адрес:example.com/search/?q=#myhashtag
НО с моим отредактированным кодом URL-адрес отображается следующим образом:example.com/myhashtag
Как можно использовать функции «#» и «$», как в исходном коде, и создавать два таких URL-адреса:
example.com/search/?q=#myhashtag
example.com/search/?q=$mycashtag
Решение
Неэкранированный символ $ в регулярном выражении будет привязан к концу входной строки.Чтобы соответствовать буквальному $, вам нужно экранировать его обратной косой чертой.