0

这个问题以前没有人问过。上面的链接没有帮助。

当尝试在 URL 中传递 TXTurl 变量时,主题标签之后的所有内容都不会作为变量传递,因为它是一个片段。我正在阅读,它的变量确实以 %23 传递。在它进入数据库之前,我一直在尝试将 # 更改为 %23。

我尝试了 urldecode() urlencode() - 我尝试了我找到的下面的 myUrlEncode 函数。

function myUrlEncode($TXTurl) {
    $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
    $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
    return str_replace($entities, $replacements, urlencode($TXTurl));
}


try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT IGNORE INTO MyFAQlist (TXTurl, TXTlinkname) 
    VALUES (:TXTurl, :TXTlinkname)");
    $stmt->bindParam(':TXTurl', $TXTurl);
    $stmt->bindParam(':TXTlinkname', $TXTlinkname);
    myUrlEncode($TXTurl); 

    // insert a row 
    $TXTurl = "$TXTurl";
    // insert a row
    $TXTlinkname = "$TXTlinkname";
    $stmt->execute();

将 TXTurl 插入数据库时​​,我想用 %23 替换 #。

还尝试使用 rawurlencode。ddint'工作

$stmt = $conn->prepare("INSERT IGNORE INTO MyFAQlist (TXTurl, TXTlinkname) 
VALUES (:TXTurl, :TXTlinkname)");
$stmt->bindParam(':TXTurl', $TXTurl);
$stmt->bindParam(':TXTlinkname', $TXTlinkname);
$TXTurl = rawurlencode($TXTurl);
4

1 回答 1

0

您可以使用以下方法对它们进行编码rawurlencode

$url = 'http://my-url.com/with-a-hash#';
echo rawurlencode($url); // http%3A%2F%2Fmy-url.com%2Fwith-a-hash%23

PHP 文档: https ://www.php.net/manual/en/function.rawurlencode.php

于 2019-07-23T22:33:27.140 回答