2010-10-10 79 views
0

我正在使用PHP從MYSQL讀取文本字段(說明)並準備JSON對象。模擬JQUERY DataTables插件示例。如何從PHP返回從MySQL返回的文本字段回車?

DESCRIPTION字段包含回車符,我相信這會導致無效的JSON。 JSONLINT.com會生成「語法錯誤,第35行出現意外的TINVALID」,解析失敗「。

http://ageara.com/exp3/server_processing_details_col.php應返回有效的JSON

我試圖使用PHP TRIM()函數刪除CR但沒有多少運氣。

相關的PHP代碼如下....

$rResult = mysql_query($sQuery, $gaSql['link']) or die(mysql_error()); 

$sQuery = " 
    SELECT FOUND_ROWS() 
"; 
$rResultFilterTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error()); 
$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); 
$iFilteredTotal = $aResultFilterTotal[0]; 

$sQuery = " 
    SELECT COUNT(TITLE) 
    FROM geometa_small 
"; 
$rResultTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error()); 
$aResultTotal = mysql_fetch_array($rResultTotal); 
$iTotal = $aResultTotal[0]; 

/* write the JSON output */ 
$sOutput = '{'; 
$sOutput .= '"sEcho": '.intval($_GET['sEcho']).', '; 
$sOutput .= '"iTotalRecords": '.$iTotal.', '; 
$sOutput .= '"iTotalDisplayRecords": '.$iFilteredTotal.', '; 
$sOutput .= '"aaData": [ '; 
while ($aRow = mysql_fetch_array($rResult)) 
{ 
    $sOutput .= "["; 
    $sOutput .= '"<img src=\"details_open.png\">",'; 
    $sOutput .= '"'.str_replace('"', '\"', $aRow['TITLE']).'",'; 
    $sOutput .= '"'.str_replace('"', '\"', $aRow['DATA_CUSTODIAN_ORGANIZATION']).'",'; 
    $sOutput .= '"'.str_replace('"', '\"', $aRow['RECORD_TYPE']).'",'; 
    $sOutput .= '"'.str_replace('"', '\"', $aRow['RESOURCE_STATUS']).'",'; 
    $sOutput .= '"'.str_replace('"', '\"', $aRow['RESOURCE_STORAGE_LOCATION']).'",'; 
    $sOutput .= '"'.str_replace('"', '\"', $aRow['UNIQUE_METADATA_URL']).'",'; 
    $sOutput .= '"'.trim(str_replace('"', '\"', $aRow['DESCRIPTION']), "/r").'"'; 
    $sOutput .= "],"; 
} 
$sOutput = substr_replace($sOutput, "", -1); 

$sOutput .= '] }'; 
echo $sOutput; 

function fnColumnToField($i) 
{ 
    /* Note that column 0 is the details column */ 
    if ($i == 0 ||$i == 1) 
     return "TITLE"; 
    else if ($i == 2) 
     return "DATA_CUSTODIAN_ORGANIZATION"; 
    else if ($i == 3) 
     return "RECORD_TYPE"; 
    else if ($i == 4) 
     return "RESOURCE_STATUS"; 
    else if ($i == 5) 
     return "RESOURCE_STORAGE_LOCATION"; 
    else if ($i == 6) 
     return "UNIQUE_METADATA_URL"; 
    else if ($i == 7) 
     return "DESCRIPTION"; 

} 

?>

回答

0

TRIM()(PHP和MySQL的版本)將不會刪除所有回車,前後入境後只有空白。您可以使用php或MySQL去除退貨。 Offhand我知道如何做到這一點在PHP:

str_replace(array("\r", "\n"), array('', ''), $mysqldata); 

希望這會有所幫助。不是100%確定是否這是JSON無效的原因。

順便說一下,如果你有PHP 5.2,你不需要瘋了,編寫自己的JSON。您可以使用json_encode()

+0

由於Tandu。嘗試 – user468648 2010-10-10 05:26:08

+0

str_replace(array(「\ r」,「\ n」),array('',''),$ sOutput); echo $ sOutput;但沒有工作,將查找到json_encode() – user468648 2010-10-10 05:33:34

+0

好的答案,甚至進一步,你可以改變代碼爲'str_replace(array(「\ r」,「\ n」),'\ n',$ mysqldata);' ,因爲''\ n''不會再被認爲是PHP中的換行符(它會被看作只是兩個字符 - '\'和'n'),但是當JavaScript在另一側解析它時,會將它們視爲換行符。 (另外,你可以用一個字符串替代多個字符串,第一個變量使用一個數組,第二個字符串替換爲'str_replace()'。) – 2010-10-10 10:03:00

0

修剪並刪除\ r和\ n根據使用手冊:

該函數返回 從空白開始 和STR的端部剝離的字符串。沒有第二 參數,修剪()將去除這些 字符:

* " " (ASCII 32 (0x20)), an ordinary space. 
* "\t" (ASCII 9 (0x09)), a tab. 
* "\n" (ASCII 10 (0x0A)), a new line (line feed). 
* "\r" (ASCII 13 (0x0D)), a carriage return. 
* "\0" (ASCII 0 (0x00)), the NUL-byte. 
* "\x0B" (ASCII 11 (0x0B)), a vertical tab. 

http://www.php.net/trim