0

我在我的网站中使用了条形码生成。当我在 HTML 标签中使用它时,它工作正常。

<div class="barcode_img"><img src="<?php echo AT::getUrl(); ?>/barcode/image.php?code=code39&o=1&dpi=150&t=30&r=1&rot=0&text=TEST NAME WITH SPACE&f1=Arial.ttf&f2=10&a1=&a2=&a3=" class="barcode fr"/></div>  

我需要将该图像存储在名为“media/barcode/”的本地文件夹中。为此,我使用了以下代码:

$valid_barcodename="testimage";
$barcodeurl = AT::getUrl() . "barcode/image.php?code=code39&o=1&dpi=150&t=30&r=1&rot=0&text=TEST NAME WITH SPACE&f1=Arial.ttf&f2=10&a1=&a2=&a3=";
        $barcode_img = 'media/barcode/testing_' .$valid_barcodename . '.png';
        file_put_contents($barcode_img, file_get_contents($barcodeurl));

存储在该文件夹中的图像不为空。当我分析它时,我发现,如果我在没有空格的情况下命名为“TEST NAME WITH SPACE”(TESTNAMEWITHSPACE),它就可以工作。

但是,如果我给它空间,它就行不通了。问题是什么?

注意: AT::getUrl() - 用于获取我的基本 url。

4

2 回答 2

2

空格在 URL 中具有特殊含义,因此您必须对它们进行编码:

$text = urlencode("TEST NAME WITH SPACE")
$barcodeurl = AT::getUrl() . "barcode/image.php?code=code39&o=1&dpi=150&t=30&r=1&rot=0&text=". $text ."&f1=Arial.ttf&f2=10&a1=&a2=&a3=";

在上面的代码中,$text现在包含您的文本,已编码并准备在您的 URL 中使用(您会注意到空格已被%20代码替换)。

于 2012-08-29T09:12:53.047 回答
1

注意:如果您要打开带有特殊字符(例如空格)的 URI,则需要使用 urlencode() 对 URI 进行编码。

http://docs.php.net/file_get_contents

或者,如果在您的服务器上启用,您可以使用 cURL。

function curl($url, $setopt = array(), $post = array())
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
    if( ! empty($post))
    {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    }
    if( ! empty($setopt))
    {
        foreach($setopt as $key => $value)
        {
            curl_setopt($curl, constant($key), $value);   
        }
    }
    $data = curl_exec($curl);
    curl_close($curl);
    return $data;
}

用法:

file_put_contents($barcode_img, curl($barcodeurl));
于 2012-08-29T09:42:49.503 回答