簡體   English   中英

如何在PHP中刪除特殊引號字符?

[英]How can I strip special quote characters in PHP?

我交給了這個項目,它有很多問題。 其中之一是最終用戶正在將直接從MS Access導出的CSV文件上載到其Web服務器上的目錄中。 下一步是截斷幾個數據庫表,然后將CSV中的所有記錄插入數據庫。

但是,MS Access用於撇號的撇號字符存在問題。 它不是單引號,也不是雙引號。它是撇號。像這樣:

"Rock/Classic 80’s-90’s"

現在,我在我的PHP中嘗試了以下內容:

$d = str_replace("’", "", $d);
$d = str_replace(array("'", "\'", "\’", "’"), "", $d);

但是,這似乎不起作用。 實際上,當基於這些數據運行SQL查詢時,它總是似乎以某種方式將'轉換為'而不將它們剝離出來,然后導致SQL錯誤,因為它認為字符串已經提前終止。

這是我正在使用的代碼塊之一:

$band_insert = "INSERT INTO `schedule` (`Band`, `Date`, `Genre`, `Club`, `Location`, `Venue`, `Time`) VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s' )";
$result = $mysqli->query('TRUNCATE TABLE `schedule`');
if(!$result) die('Truncate error');

if( ($handle=fopen('./export/schedule.csv', 'r')) !== FALSE)
{
    while( ($data=fgetcsv($handle, 1000, ',', '"', '\\')) !== FALSE )
    {
        foreach($data as $d) 
        {
            $d = str_replace("’", "", $d);
            # For debugging purposes only
            echo "<p>$d</p>";
        }
        $sql = sprintf($band_insert, $data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6]);
        #$sql = $mysqli->real_escape_string($sql);
        $result = $mysqli->query($sql);
        if( ! $result ) $log[] = lg("Unable to perform query ($mysqli->errno): $mysqli->error");
    }
    $log[] = lg("Successful upload (".date("Y-m-d").").");

    fclose($handle);
}

問題變成了,為什么這不起作用? 當我回顯$ d值時,會打印出一個? 在一個廣場上。 即使有header('Content-type: text/html; charset=utf-8'); 在文件的頂部。

我在Access和Excel方面遇到了一些類似的障礙,並且使用了這個,我選擇了某個地方來擦除MS字符(所以應歸功於它的原始作者)。 也許您可以按原樣使用它,或相應地進行調整:

// First, replace UTF-8 characters.
$text = str_replace(
array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93", "\xe2\x80\x94", "\xe2\x80\xa6"),
array("'", "'", '"', '"', '-', '--', '...'),
$text);

// Next, either REPLACE their Windows-1252 equivalents.
$text = str_replace(
array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)),
array("'", "'", '"', '"', '-', '--', '...'),
$text);

// OR, STRIP their Windows-1252 equivalents.
$text = str_replace(
array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)),
array('', '', '', '', '', '', ''),
$text);

我認為你寫的echo "<p>$d</p>";有些不對勁echo "<p>$d</p>"; 我認為這應該是

echo "<p>".$d."</p>";

我拿了你的代碼並使用變量讓它工作。

$string = "Rock/Classic 80’s-90’s";
$replace = "’";
$string = str_replace($replace, "", $string);
echo "<p>$string</p>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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