Intereting Posts
Ссылка на конкретный шаг в одной странице проверки Динамическое значение dropdownlist из базы данных Тестирование Laravel 4; «phpunit» не распознается? Отправьте форму на один сервер, обработайте ее, а затем опубликуйте результаты в другом домене PHP Конкатенация ссылки изображения в эхом Как выполнить запрос MySQL с несколькими предложениями WHERE? Как получить достоверный вывод JSON из ответа в Zend Framework 3? как написать функцию Max ($ array), которая возвращает максимальное значение, содержащееся в массиве $, или некоторый массив, вложенный в массив $ array Как хранить и извлекать текстовые данные в MySQL, сохраняя разрывы строк? Неверное значение столбца mysql Присоединиться к таблице в Symfony 2 Перенаправление входа Joomla назад на страницу на предыдущую страницу Невозможно связаться с Laravel Ссылки на PHP-переменные и использование памяти как мы правильно используем mysqli для извлечения всех записей из таблицы?

jquery @mention делает вывод ссылкой

Эй, ребята, я использую этот плагин от Hawkee. Его как твиттер, где вы можете @mention кого-то. У меня возникают проблемы с выходом. Этот метод:

updateHidden: function() { var trigger = this.options.trigger; var contents = this.element.val(); for(var key in this.id_map) { var regex = trigger+key; regex = regex.replace(/[!@#\$%\^&\*\(\)\+=-\[\]\\';,\.\/\{\}\|":<>\?~_]/g, '\\$&'); regex = new RegExp(regex, "g"); //contents = contents.replace(regex, trigger+'['+this.id_map[key]+']'); //I changed the code above to: contents = contents.replace(regex, '@[' + this.id_map[key] +':' + key + ']'); } $(this.options.hidden).val(contents); } 

Вышеупомянутый код будет выведен на скрытый тег, влияющий на его значение, в котором

Выходы: @ [123: peterwateber] // Формат – @ [].

Я использую PHP в качестве задней части. Моя проблема: я хочу преобразовать вывод в

 <a href="www.something.com/profile?pid=123">peterwateber</a> 

У меня большая проблема с кодами здесь, так как я плохо разбираюсь в RegEx. Я придумал код:

  //THIS CODE SHOULD GET 1234,peterwateber,88,hi. $string = "@[1231:peterwateber] sdfsdfsdfsdfsdfsdf@[88:hi]sddsf"; preg_match_all("^\[(.*?)\]^",$string,$matches,PREG_PATTERN_ORDER); foreach ($matches[1] as $match) { echo $match.'<br/>'; //outputs 1231:peterwateber, 88:hi } preg_match_all("^\[([\w\d]+):(.*?)\]^",$string,$aw,PREG_PATTERN_ORDER); foreach ($aw[1] as $match) { echo $match.'<br/>'; //sad to say this code outputs the text '1231 and 88' } 

Moreso, чтобы иметь возможность получить результат, у меня есть эта форма:

 <form class="form-horizontal" data-post="request" method="post"> <div class="control-group boxTextAreaHolder"> <textarea placeholder="What are you thinking?" class="UITextarea" title="What are you thinking?" name="statuspost" id="statuspost" tag-status="this"></textarea> <input type="hidden" name="tags" id="tag-post" /> </div> </form> 

При представлении вывод будет обработан для этой функции. Эта функция не допускает никаких htmlspecialchars и обнаруживает URL-адрес, например "http://stackoverflow.com"

 private static function validate_text($text = '') { // This method is used internally as a FILTER_CALLBACK if (mb_strlen($text, 'utf8') < 1) return false; // Encode all html special characters (<, >, ", & .. etc) and convert //$str = nl2br(htmlspecialchars($text)); $str = htmlspecialchars($text); // the new line characters to <br> tags: // Remove the new line characters that are left $str = str_replace(array(chr(10), chr(13)), '', $str); $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $str); $ret = ' ' . $text; $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret); $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret); $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret); //$ret = preg_replace("#^*@([)([0-9-])(])#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret); $ret = substr($ret, 1); return $ret; } 

Проблема в том, что я не знаю, как преобразовать @ [1234: peterwateber] в **<a href="www.something.com/profile?pid=123">peterwateber</a>** и как исключить метки привязки из htmlspecialchars

Регулярное выражение для 1231 – peterwateber и 88 – hi –

 preg_match_all("#@\[(\w+)\:(\w+)\]#', $str); 

Это зависит от того, какие символы у вас есть в вашей строке ввода. \w предполагает, что у вас есть только «слова» (буквы и цифры).

 $hidden_input = '@[123:web]hello world!'; preg_match('#@\[(\w+)\:(\w+)\]\s*(.*)$#', $hidden_input, $m); echo '<a href="'.m[1].'">'.$m[2].'</a>'.$m[3]; function validate_text($text = '') { // This method is used internally as a FILTER_CALLBACK if (mb_strlen($text, 'utf8') < 1) return false; // Encode all html special characters (<, >, ", & .. etc) and convert //$str = nl2br(htmlspecialchars($text)); $str = htmlspecialchars($text); // the new line characters to <br> tags: // Remove the new line characters that are left $str = str_replace(array(chr(10), chr(13)), '', $str); $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $str); $ret = ' ' . $text; $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret); $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret); $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret); //$ret = preg_replace("#^*@([)([0-9-])(])#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret); $ret = substr($ret, 1); return $ret; } var_dump(validate_text('@[123:peterwateber] fsdfsdfdsf')); 

дает string(30) "@[123:peterwateber] fsdfsdfdsf" введите код здесь