簡體   English   中英

PHP,將 UTF-8 轉換為 ASCII 8 位

[英]PHP, convert UTF-8 to ASCII 8-bit

我正在嘗試使用iconv函數將字符串從 UTF-8 轉換為 ASCII 8 位。 該字符串旨在導入會計軟件(根據 SIE 標准解析的一些基本指令)。

我現在正在運行的內容:

iconv("UTF-8", "ASCII", $this->_output)

這適用於會計軟件 #1,但軟件 #2 抱怨編碼。 標准指定的編碼是: IBM PC 8-bit extended ASCII (Codepage 437)

我的問題是,PHP 將我的字符串編碼到哪個版本的 ASCII 中,如果不是指定的 - 我該如何根據標准規范對字符串進行編碼?

試試這個軟件#2

iconv("UTF-8", "CP437", $this->_output);

擴展ASCII與普通ASCII不同。 第一個可能接受ASCII,但第二個軟件需要擴展ASCII - 代碼頁437

看到這個鏈接

我正在查看這個問題以及作為答案發布的內容,並且對我在這里找到的內容感到非常失望,此外我還能夠從其他來源(例如 PHP 文檔)中收集到的可接受或更好的內容答案。

我有一個輸入字符串,它是一個對象的屬性。 輸入是來自數據庫的 UTF-8,我很高興它是好的形式和有效的。 每一個跡象都表明這是真的。 它最初來自一個由第三方准備和存儲的數據庫。 我寧願不需要在此函數處理之前更改輸入字符串。 處理后的字符串顯示在帶有 UTF-8 元字符集的網頁上。 我已經檢查過了。

輸入字符串有我想保留的 HTML 實體,所以第一件事是解碼 HTML 實體。 如果有人有更好的主意,則可以將此操作從第一個位置移到函數的末尾。 在我看來,這發生的順序應該無關緊要。

所以這讓我回到了最初的問題。 應該如何使用 PHP 從 UTF-8 轉換為 ASCII 8 位? 在這一點上你回答什么真的無關緊要,因為我已經開始走自己的路,這從下面的 PHP 代碼中可以明顯看出。

基本上我已經開始做的是在出現問題時以編程方式解碼 UTF-8。 這樣做的一個優點是,我可以在出現問題時為每個問題選擇任何替代方案,但我真的更願意依賴社區。

    function decodedText($langObject, $keyString) {
    $decodeText = htmlspecialchars_decode($langObject->$keyString);
    
    //$decodeText = iconv("UTF-8", "ISO-8859-1//IGNORE", $decodeText);
    //$decodeText = iconv("UTF-8", "CP437", $decodeText);
    
    $decodeText = str_replace("\204", '"', $decodeText); // quote
    $decodeText = str_replace("\223", '"', $decodeText); // quote
    $decodeText = str_replace("\224", '"', $decodeText); // quote
    $decodeText = str_replace("\302", "", $decodeText); // first byte of a 2-byte utf-8
    if ("p14p1" == $keyString) {
        error_log("BEFORE:");
        error_log($langObject->$keyString);
        error_log(substr($langObject->$keyString, 592, 26));
        //error_log(mb_ord(substr($langObject->$keyString, 36)));
        error_log(ord(substr($langObject->$keyString, 592, 1)));
        error_log(decbin(ord(substr($langObject->$keyString, 592, 1))));
        error_log(decbin(ord(substr($langObject->$keyString, 593, 1))));
        error_log(decbin(ord(substr($langObject->$keyString, 594, 1))));
        error_log(decbin(ord(substr($langObject->$keyString, 595, 1))));
        error_log(decbin(ord(substr($langObject->$keyString, 596, 1))));
        error_log(decbin(ord(substr($langObject->$keyString, 597, 1))));
        error_log($decodeText);
        error_log("AFTER:");
    }
    return $decodeText;
}

為原始問題提供更好的答案,或者根據需要忽略此問題。 有趣的是,此時這個問題已經被瀏覽了 37,000 多次,到目前為止基本上沒有給出有用的答案。 現有的答案共有 13 個贊成票。 順便說一句,CP437 對我不起作用。

暫無
暫無

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

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