У меня есть функция 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 #أكل
Хештег # أكل не должен быть ссылкой.
Как я могу установить его на арабский язык для связи?
вы можете использовать:
$ret = preg_replace('/#([^\s]+)/','<span class="tag"><a href=//'.$host.'/hashtag?key=$1>$0</a></span>',$ret);
Но я думаю, что арабские знаки в URL-адресе не будут работать.
\w будет соответствовать только az, AZ, 0-9, включая символ _ (подчеркивание), но не арабские знаки.
Кажется, это работает для меня с одной незначительной модификацией:
<?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. Учитывая, что замена, похоже, работает очень хорошо.