簡體   English   中英

使用 Laminas\Validator\Uri 驗證一個 URL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM