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

У меня есть функция хэштега, как это:

$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 #أكل

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

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

1

Решение

Вы могли бы использовать:

$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, включая символ _ (подчеркивание), но не арабские знаки.

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 модификатор для вашего шаблона регулярных выражений. Это переключает механизм регулярных выражений в режим Юникод. Учитывая, что замена, кажется, работает просто отлично.

0

По вопросам рекламы [email protected]