PHP-仅在文本链接中将空间转换为%20

PHP-仅在文本链接中将空间转换为%20,php,regex,Php,Regex,我有一个包含超链接的文本,一些超链接包含空格,我想将它们转换为%20 例如: 创建超链接的步骤 如果我使用rawurlencode函数转换上面的文本,它将返回 至%20make%20超链接%20%3Ca%20href%3D%22http%3A%2F%2Fwww.link To my page.com%2Fpage%201.html%22%3EPage%201%3C%2Fa%3E 我写了下面的RE,只是为了将链接中的空间转换为%20,但我不确定如何使用preg\u replace应用空间(\s)*

我有一个包含超链接的文本,一些超链接包含空格,我想将它们转换为%20

例如:

创建超链接的步骤

如果我使用rawurlencode函数转换上面的文本,它将返回

至%20make%20超链接%20%3Ca%20href%3D%22http%3A%2F%2Fwww.link To my page.com%2Fpage%201.html%22%3EPage%201%3C%2Fa%3E

我写了下面的RE,只是为了将链接中的空间转换为%20,但我不确定如何使用preg\u replace应用空间(\s)*

/(http|https|ftp|ftps)(\:\/\/[a-zA-Z0-9\-\.]+)(\s)*\.[a-zA-Z]{2,4}(\/\S*)?/
任何帮助都将不胜感激


谢谢

这里的正确答案不是regexp。它是urlencode()

最简单的方法是使用和:

$html='制作超链接';
$doc=新的DOMDocument();
$doc->loadHTML($html);
//保存固定的HTML
$innerHTML='';
foreach($doc->getElementsByTagName('p')->item(0)->childNodes作为$child){
$innerHTML.=$doc->saveHTML($child);
}
echo$innerHTML;
输出:

创建超链接

如果您只想将空格转换为%20,可以使用
$transformed=str_replace('''%20',$input)
这就是你要找的吗?@Andrew这将得到与我在问题中提到的相同的结果。这将在文本中添加一个
+
。我认为@jason只想对文本块中的链接进行URL编码。然后他想使用正则表达式检测URL,然后将所有匹配项提供给urlencode()。我重新阅读了这个问题,我认为他应该像@nickb建议的那样使用DOMDocument。我以为他说的是将URL回显到“a”标记中,而不是解析HTML文档并修复它。虽然,这仍然有点不清楚,但我倾向于后者。它不允许我编辑你的帖子。但我认为你是对的。这实际上应该是getElementsByTagName('a')而不是p。不,不是,请参见我链接的示例以及另一个SO问题。它必须是
p
,因为
loadHTML()
在不完整的HTML周围插入一个HTML容器。整个循环都是为了去除多余的HTML。谢谢你,这很有帮助。
$html = 'To make hyperlinks <a href="http://www.link-to-my-page.com/page 1.html">Page 1</a>';
$doc = new DOMDocument();
$doc->loadHTML( $html);

// Save the fixed HTML
$innerHTML = '';
foreach( $doc->getElementsByTagName('p')->item(0)->childNodes as $child) {
    $innerHTML .= $doc->saveHTML($child);
}

echo $innerHTML;
To make hyperlinks <a href="http://www.link-to-my-page.com/page%201.html">Page 1</a>