preg_replace 与 urlencode
preg_replace with urlencode
我正在尝试使用 preg_replace 创建话题标签链接,当话题标签中出现“”时我遇到了问题。我不太擅长模式,所以任何帮助将不胜感激:
我的模式:
$hashtags_url = '/(\#)([x00-\xFF]+[a-zA-Z0-9x00-\xFF_\w]+)/';
$body = preg_replace($hashtags_url, '<a href="'.$hashtag_path.'" title="#">#</a>', $body);
这对普通主题标签非常有效,但问题是当我尝试对 $2 参数进行 urlencode 时。
我试过了
$hashtags_url = '/(\#)([x00-\xFF]+[a-zA-Z0-9x00-\xFF_\w]+[x00-\xFF]+[a-zA-Z0-9x00-\xFF_\w])/';
和
$body = preg_replace_callback(
$hashtags_url,
function($matches) {
return "<a href=\"$hashtag_path/hashtag/".urlencode($matches[2])."\">#".
$matches[2]."</a>";
},
$body);
一切顺利,但现在省略了单字主题标签。
您可以使用以下简化的正则表达式,$matches[1]
访问用作替换参数的匿名函数中的主题标签名称:
/#(\S+)/
确保使用 use
关键字将所有必要的变量传递给回调函数(参见 use ($hashtag_path)
)。
参见PHP demo:
$body = "Text text #hashtag text text #hast/tag";
$hashtag_path = '/path/to';
$hashtags_url = '/#(\S+)/';
$body = preg_replace_callback(
$hashtags_url, function($matches) use ($hashtag_path) {
return "<a href=\"$hashtag_path/hashtag/".urlencode($matches[1])."\">".$matches[0]."</a>";
},
$body);
echo $body;
输出:
Text text <a href="/path/to/hashtag/hashtag">#hashtag</a> text text <a href="/path/to/hashtag/hast%2Ftag">#hast/tag</a>
我正在尝试使用 preg_replace 创建话题标签链接,当话题标签中出现“”时我遇到了问题。我不太擅长模式,所以任何帮助将不胜感激:
我的模式:
$hashtags_url = '/(\#)([x00-\xFF]+[a-zA-Z0-9x00-\xFF_\w]+)/';
$body = preg_replace($hashtags_url, '<a href="'.$hashtag_path.'" title="#">#</a>', $body);
这对普通主题标签非常有效,但问题是当我尝试对 $2 参数进行 urlencode 时。
我试过了
$hashtags_url = '/(\#)([x00-\xFF]+[a-zA-Z0-9x00-\xFF_\w]+[x00-\xFF]+[a-zA-Z0-9x00-\xFF_\w])/';
和
$body = preg_replace_callback(
$hashtags_url,
function($matches) {
return "<a href=\"$hashtag_path/hashtag/".urlencode($matches[2])."\">#".
$matches[2]."</a>";
},
$body);
一切顺利,但现在省略了单字主题标签。
您可以使用以下简化的正则表达式,$matches[1]
访问用作替换参数的匿名函数中的主题标签名称:
/#(\S+)/
确保使用 use
关键字将所有必要的变量传递给回调函数(参见 use ($hashtag_path)
)。
参见PHP demo:
$body = "Text text #hashtag text text #hast/tag";
$hashtag_path = '/path/to';
$hashtags_url = '/#(\S+)/';
$body = preg_replace_callback(
$hashtags_url, function($matches) use ($hashtag_path) {
return "<a href=\"$hashtag_path/hashtag/".urlencode($matches[1])."\">".$matches[0]."</a>";
},
$body);
echo $body;
输出:
Text text <a href="/path/to/hashtag/hashtag">#hashtag</a> text text <a href="/path/to/hashtag/hast%2Ftag">#hast/tag</a>