我正在尝试找出一种从文本字符串中获取URL数组的方法。
这个文本将会被格式化,就像这样:
我正在使用:
当我执行
显然,这些链接可以是任何东西(而且可能有很多链接,那些只是我现在正在测试的链接)。如果我使用一个简单的URL,像这样的正则表达式就可以了。这里有一些随机的文本
http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tickets-for-disrupt-sf/
我正在使用:
preg_match_all('((https?|ftp|gopher|telnet|file|notes|ms-help):'.
'((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)',
$bodyMessage, $matches, PREG_PATTERN_ORDER);
当我执行
print_r( $matches);
时,得到的结果如下:Array ( [0] => Array (
[0] => http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon=
[1] => http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick=
[2] => http://techcrunch.co=
[3] => http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-ip=
[4] => http://techcrunch.com/2012/07/20/last-day-to-purc=
[5] => http://tec=
)
...
那个数组中的所有项都不是来自上面链接的完整链接。
有人知道一个好方法来获取我需要的内容吗?我找到了一堆用于获取PHP链接的正则表达式,但没有一个可行。
谢谢!
编辑:
好的,所以我正在从一封电子邮件中获取这些链接。脚本解析电子邮件,获取消息正文,然后尝试从中获取链接。 经过调查电子邮件,似乎由于某种原因在URL中间添加了一个空格。以下是我的PHP脚本看到的消息正文输出。
--00248c711bb99ca36d04c54ba5c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon= es-bezel-a-massive-notification-light/?grcc=3D88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2= =3D835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033f= deed202~510f37324b14c50a5e9121f955fac3fa~1342747216490~0~0~0~0~0~0~0~0~7~3~ http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= ets-for-disrupt-sf/ --00248c711bb99ca36d04c54ba5c6 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
有没有关于如何避免URLS中断的建议?
编辑2
根据Laurnet的建议,我运行了这段代码:
$bodyMessage = str_replace("= ", "",$bodyMessage);
然而,当我将其输出时,它似乎不想替换“= ”。
--00248c711bb99ca36d04c54ba5c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon= es-bezel-a-massive-notification-light/?grcc=3D88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2= =3D835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033f= deed202~510f37324b14c50a5e9121f955fac3fa~1342747216490~0~0~0~0~0~0~0~0~7~3~ http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= ets-for-disrupt-sf/ --00248c711bb99ca36d04c54ba5c6 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
=
的实例看起来很像一种分块编码,你的代码似乎没有正确处理。 - mellamokb=
" 替换为空即可。 - laurent