[英]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.