[英]Using Laminas\Validator\Uri to validate a URL
所以我正在嘗試使用 Laminas\Validator\Uri package 來驗證 URL。這是一個代碼片段:
$uriValidator = new Uri();
$result = $uriValidator->isValid($someVariable);
無論 $someVariable 值如何,即使它只是一個字母,expression 的計算結果都是 true。 我試圖為 UriHandler 設置一個方案,但它沒有改變任何東西。
$uriValidator->getUriHandler()->setScheme('http');
我的目標是配置 $uriValidator,使其驗證標准 URL,就像 filter_var($url, FILTER_VALIDATE_URL) 一樣。
任何建議將被認真考慮。
我今天測試了 Laminas Uri 驗證器的這種行為,並且可以重現所描述的行為。 雖然這種行為感覺像是一個錯誤,但事實並非如此。
通常,這是一個配置問題。 當您在沒有任何其他選項的情況下初始化驗證器時,它同時允許相對和絕對 uri 。 考慮到這一點,給定的字符串可能是一個相對的 url。驗證器將字符串驗證為典型的 uri,因為blah! 是一個有效的路徑。
以下示例在涉及技術定義時驗證 URL(這確實與 URI 不同)。
<?php
declare(strict_types=1);
namespace Marcel;
use Laminas\Validator\Uri;
$validator = new Uri([
'allowAbsolute' => true,
'allowRelative' => false,
]);
$validator->isValid('blah!'); // results into false
如果laminas/laminas-uri
標准處理程序不符合您的需要,您甚至可以編寫自己的 uri 處理程序並將其與驗證器一起使用。 你自己的 uri 處理程序必須從\Laminas\Uri\Uri
擴展並且可以像這樣使用:
<?php
declare(strict_types=1);
namespace Marcel;
use Laminas\Validator\Uri;
use Marcel\Uri\MyOwnHandler;
$validator = new Uri([
'uriHandler' => MyOwnHandler::class,
'allowAbsolute' => true,
'allowRelative' => false,
]);
$validator->isValid('blah!'); // results into false
您可以使用league/uri
等替代方案,並在您自己的 uri 處理程序中實現它來驗證 url,而不是重新發明輪子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.