【问题标题】:Target URLs with special characters带有特殊字符的目标 URL
【发布时间】:2020-06-11 15:47:05
【问题描述】:

我有一个带有 HTML 的字符串,我的目标图像 URL 是这样的:

$regex = '#([a-z,:=\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))#i';

适用于:

https://example.com/image.jpg

但是当一个 URL 有一个特殊字符时,比如:

https://example.com/ストスト.jpg

不匹配。 See test!

如何更改正则表达式,使其与具有这些特殊字符的 URL 匹配?

【问题讨论】:

标签: php regex


【解决方案1】:

您总是可以尝试在正则表达式上使用 unicode 标志,看看这些字符是否匹配,如下所示:

$regex = '#([a-zストスト,:=\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))#iu';

注意正则表达式末尾的u(它指的是unicode)

显然,如果支持,您可以添加字母范围。

即像这样ス-ト

另一种方法是在正则表达式中添加完整的字母表,就在您的 a-z 参数之后。也检查一下这个answer

希望对你有帮助!

编辑:

根据您提到任何外来字符的评论,我能想到的最好的事情是使用参数\w,这意味着每个单词字符,并在您的正则表达式末尾添加u 标志。

这意味着它可能是$regex = '#([\w,:=\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))#iu';

使用此正则表达式,您的 2 个示例可以正常工作。等待您的回复:)

【讨论】:

  • 但是我的目标不是专门针对ストスト这些字符,而是所有外文字符。您能否使用我的正则表达式代码作为参考来编辑您的答案?
【解决方案2】:
'#([\p{L},:=\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))#i'

这适用于所有外语字符。 希望这可以帮助

【讨论】:

  • 好像不行,请see this...
  • $domain 未定义
【解决方案3】:

在字符类中,您不必转义,:。如果您使用不同的分隔符,例如 #,您也不必转义 /

您可以将模式缩短为

[\w,=/:.-]+\.(?:jpe?g|png|gif)

Regex demo | Php demo

如果你想从锚点中找到 href,我建议改用解析器。

包含u unicode 标志的模式:

$regex = '#[\w,=/:.-]+\.(?:jpe?g|png|gif)#iu

例如(使用锚点 ^$ 来防止部分匹配)

$input = <<<HTML
<a href="https://e...content-available-to-author-only...e.com/example1.jpg">
<a href="https://e...content-available-to-author-only...e.com/ストスト.jpg">
<a href="https://e...content-available-to-author-only...e.com/example3.jpg">
<a href="https://e...content-available-to-author-only...e.com/example3.bak">
HTML;

$dom = new DomDocument();
$dom->loadHTML(mb_convert_encoding($input, 'HTML-ENTITIES', "UTF-8"));

$anchors = $dom->getElementsByTagName("a");
$regex = '#^[\w,=/:.-]+\.(?:jpe?g|png|gif)$#iu';

foreach ($anchors as $anchor) {
    $res = $anchor->getAttribute("href");
    if (preg_match($regex, $res)) {
        echo "Valid url: $res" . PHP_EOL;
    } else {
        echo "Invalid url: $res" . PHP_EOL;
    }
}

输出

Valid url: https://e...content-available-to-author-only...e.com/example1.jpg
Valid url: https://e...content-available-to-author-only...e.com/ストスト.jpg
Valid url: https://e...content-available-to-author-only...e.com/example3.jpg
Invalid url: https://e...content-available-to-author-only...e.com/example3.bak

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多