PHP Hashtag для арабского не может быть ссылкой

1

У меня есть функция hashtag следующим образом:

$ret = preg_replace('/#(\\w+)/','<span class="tag"><a href=//'.$host.'/hashtag?key=$1>$0</a></span>',$ret); 

Если сообщение похоже:

I like this #verymuch

Тогда # очень много будет: http://example.com/hashtag?key=verymuch и быть ссылкой. Пока эта работа не прекратится.

Но когда я печатаю арабский хэштег. пример:

I like #أكل

Хештег # أكل не должен быть ссылкой.

Как я могу установить его на арабский язык для связи?

Теги:
hashtag

2 ответа

0
Лучший ответ

вы можете использовать:

$ret = preg_replace('/#([^\s]+)/','<span class="tag"><a href=//'.$host.'/hashtag?key=$1>$0</a></span>',$ret);

Но я думаю, что арабские знаки в URL-адресе не будут работать.

\w будет соответствовать только az, AZ, 0-9, включая символ _ (подчеркивание), но не арабские знаки.

  • 0
    Какую разницу это изменение в шаблоне может иметь? Помимо того, что захват здесь не является проблемой ...
  • 0
    Я обновил свой ответ (\ w не будет совпадать с арабскими знаками).
Показать ещё 4 комментария
0

Кажется, это работает для меня с одной незначительной модификацией:

<?php

$host = 'some.host.site';

//$subject = 'I like this #verymuch';
$subject = 'I like this #أكل';
$pattern = '/#(\\w+)/u';
$replace = '<span class="tag"><a href=//'.$host.'/hashtag?key=$1>$0</a></span>';

var_dump(preg_replace($pattern, $replace, $subject));

Выход:

string(90) "I like this <span class="tag"><a href=//some.host.site/hashtag?key=أكل>#أكل</a></span>"

Обратите внимание, что я добавил модификатор u к вашему шаблону регулярного выражения. Это переключает механизм регулярных выражений для использования режима Unicode. Учитывая, что замена, похоже, работает очень хорошо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню