gpt4 book ai didi

php - filter_var($url, FILTER_VALIDATE_URL) 在 PHP 5.3.2 中表现怪异

转载 作者:可可西里 更新时间:2023-10-31 23:23:49 24 4
gpt4 key购买 nike

由于某些奇怪的原因,下面的函数表示此 url“paradox-productions.net”在 http://alpha.shurl.be/ 上无效在我的本地主机上有效。它是 PHP 中的错误还是可能导致此问题的原因?谁能证实这一点?可以解决还是我需要在我的服务器上升级 PHP?

php 信息:http://alpha.shurl.be/phpinfo.php

功能:




    函数 validUrl($url) {
变量转储($url);
如果(strpos($url, ".") !== false) {
变量转储($url);
如果(strpos($url, "://") === false) {
$url = "http://". $网址;
变量转储($url);
}
}

如果(filter_var($url,FILTER_VALIDATE_URL)){
echo "有效\n";
}
别的 {
echo "无效\n";
}
var_dump(filter_var($url, FILTER_VALIDATE_URL));

返回 filter_var($url, FILTER_VALIDATE_URL);
}
?>

最佳答案

这是 PHP 5.3.2 中的一个已知错误。它认为带有破折号的 URL 无效。参见 https://bugs.php.net/bug.php?id=51258 .您的本地 PHP 必须是不存在此错误的不同版本。

如果你可以升级到一个工作版本,这样做可能是个好主意。如果不能,您可以通过在验证之前从字符串中删除所有由其他有效 url 字符分隔的破折号来解决此问题。下面的正则表达式并不完美,但如果你知道破折号只会出现在字母、数字或下划线之间(通常是正确的,但请注意这不会处理某些不太可能的边缘情况),它应该可以工作。

$url_to_validate = preg_replace("/([\w\d])-(?=[\w\d])/", '\\1\\2', $url);

\w 表示“任何字母或下划线”,\d 表示“任何数字”,所以 [\w\d] 表示任何字母、数字或下划线。第二个需要零宽度正先行断言(使用 (?=...))以确保它捕获序列中的所有破折号,如 a-b-c-d-e(没有它,它会错过该序列中的所有其他破折号)。

这是错误报告的正文:

Description:

FILTER_VALIDATE_URL does not allow dashes/hyphens in the host name. That's just silly.

Test script:

$ php -r 'var_dump(filter_var("http://www.something.com/",
FILTER_VALIDATE_URL));'

$ php -r 'var_dump(filter_var("http://www.some-thing.com/",
FILTER_VALIDATE_URL));'

Expected result:

$ php -r 'var_dump(filter_var("http://www.something.com/",
FILTER_VALIDATE_URL));' string(25) "http://www.something.com/"

$ php -r 'var_dump(filter_var("http://www.some-thing.com/",
FILTER_VALIDATE_URL));' string(26) "http://www.some-thing.com/"

Actual result:

$ php -r 'var_dump(filter_var("http://www.something.com/",
FILTER_VALIDATE_URL));' string(25) "http://www.something.com/"

$ php -r 'var_dump(filter_var("http://www.some-thing.com/",
FILTER_VALIDATE_URL));' bool(false)

关于php - filter_var($url, FILTER_VALIDATE_URL) 在 PHP 5.3.2 中表现怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com