2

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

例如:

制作超链接<a href="http://www.link-to-my-page.com/page 1.html">Page 1</a>

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

To%20make%20hyperlinks%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_replace 应用空间 (\s)*。

/(http|https|ftp|ftps)(\:\/\/[a-zA-Z0-9\-\.]+)(\s)*\.[a-zA-Z]{2,4}(\/\S*)?/

任何帮助将不胜感激。

谢谢

4

2 回答 2

4

最简单的方法是使用DOMDocument让它为您解决这个问题

$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;

输出,感谢这个 SO 问题

To make hyperlinks <a href="http://www.link-to-my-page.com/page%201.html">Page 1</a>
于 2012-06-21T17:55:39.787 回答
3

这里的正确答案不是正则表达式。这是 urlencode() http://php.net/manual/en/function.urlencode.php

于 2012-06-21T17:48:56.287 回答