У меня есть функция хэштега, как это:
$ret = preg_replace('/#(\\w+)/','<span class="tag"><a href=//'.$host.'/hashtag?key=$1>$0</a></span>',$ret);
Если опубликовать как:
I like this #verymuch
Тогда #vermuch будет: 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 будет соответствовать только a-z, A-Z, 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
модификатор для вашего шаблона регулярных выражений. Это переключает механизм регулярных выражений в режим Юникод. Учитывая, что замена, кажется, работает просто отлично.