実現したいこと
- 日本語だと通過できるようなコードにしたい。
詳細
$urlに日本語が含まれたURL(例: https://example.com/あいうえお )の場合に「URLの形式が正しくありません。正しいURLを入力してください。」になる理由が分かりません。
そこまで詳しいわけではないので分かりやすく説明・修正方法をご提示ください。
宜しくお願い致します。
該当のソースコード(一部)
php
1 if ($url !== null) { 2 if (!isValidURL($url)) { 3 $errors[] = "URLの形式が正しくありません。正しいURLを入力してください。"; 4 } 5 } 6 7~~~ 8 9function isValidURL($url) { 10 return filter_var($url, FILTER_VALIDATE_URL) && preg_match("/^(https?):/", $url); 11}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
URLに使える文字は決まっていて、それ以外の文字はエンコードします。
URLはいくつかのパートに別れているので、パート毎に使える文字の範囲が異なります。
PHPでどうするのが普通なのかよく知りませんが、例えば、
PHP
1$url="https://api.kmr1.org/v1/?" . http_build_query(["url"=>"https://example.com/あいうえお"]);
で、クエリーパラメーターの中のurl
の値がエンコードされます。
投稿2024/08/24 02:10
総合スコア85842
0
ベストアンサー
PHP 8.3.8で確認しました。
isValidURL関数に1行追加します。
function isValidURL($url) { $url = idn_to_ascii($url); return filter_var($url, FILTER_VALIDATE_URL) && preg_match("/^(https?):/", $url); }
https://www.php.net/manual/ja/filter.filters.validate.php
のFILTER_VALIDATE_URLには、「この関数は、ASCII の URL のみを正しいとみなすことに注意しましょう。 国際化ドメイン名 (非 ASCII 文字を含むもの) は失敗します。」とあります。
idn_to_ascii
https://www.php.net/manual/ja/function.idn-to-ascii.php
(訂正)
最初の回答は、国際化ドメインと日本語URLを勘違いしていました。申し訳ございませんでした。
isValidURL関数に3行追加します。
function isValidURL($url) { $url = rawurlencode($url); $url = str_replace("%3A", ":", $url); $url = str_replace("%2F", "/", $url); return filter_var($url, FILTER_VALIDATE_URL) && preg_match("/^(https?):/", $url); }
(訂正・その2)
otnさんの指摘により訂正します。
isValidURL関数に5行追加します。
function isValidURL($url) { $url = rawurlencode($url); $url = str_replace("%3A", ":", $url); $url = str_replace("%2F", "/", $url); $url = str_replace("%3F", "?", $url); $url = str_replace("%3D", "=", $url); return filter_var($url, FILTER_VALIDATE_URL) && preg_match("/^(https?):/", $url); }
投稿2024/08/24 02:49
編集2024/08/24 13:44総合スコア1072
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/08/24 04:01
2024/08/24 04:16
2024/08/24 04:23
2024/08/24 04:24
2024/08/24 05:53
2024/08/24 05:56
2024/08/24 07:16
2024/08/24 11:38
2024/08/24 13:49 編集
2024/08/24 14:30
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。