输入字段显示带引号的 URL

input field showing an URL with quotes

我必须将一些维基百科 URL 存储到 MariaDB 数据库中。

碰巧有些 URL 包含引号,例如:

https://en.wikipedia.org/wiki/%22Heroes%22

所以我使用 urlencode() 将它们存储为 "en.wikipedia.org%2Fwiki%2F%22Heroes%22"

如果我 urldecode() URL,为了在 <input type="text"> 字段中显示它而没有所有的 %(它们会吓到不熟练的用户),引号会破坏 input 值。

我发现这个解决方法可以更舒适地显示结果:

$url = 'en.wikipedia.org%2Fwiki%2F%22Heroes%22'; // it comes in this way from the DB
$tmp = str_replace('%22','&quot;', $url);
$url_input = urldecode($tmp);
echo "<input type=\"text\" value=\"$url_input\" />";

$url_input 的值可以作为 <a href 锚点正常工作,然后使用 FILTER_SANITIZE_URLurlencode() 过滤来自表单的查询以将其存储在数据库。

有更好的方法吗?

只需使用 htmlspecialchars() 而不是 str_replace()

$url = 'en.wikipedia.org%2Fwiki%2F%22Heroes%22'; // it comes in this way from the DB
//$tmp = str_replace('%22','&quot;', $url);
$url_input = htmlspecialchars(urldecode($url));
echo "<input type=\"text\" value=\"$url_input\" />";

我认为它会比这个更好用