簡體   English   中英

更改 iconv() 替換字符

[英]Change iconv() replacement character

我正在使用iconv()來替換 api 請求的字符,如下所示:

$text = iconv("UTF-8", "ASCII//TRANSLIT", $text);

這很好用,但是當遇到未知字符時,它會被替換為? . 有什么直接的方法可以將替換字符更改為其他字符? 說空格? 我知道 mb 函數mb_substitute_character()的設置 - 但這不適用於iconv()

例子:

$text = '? € é î ü π ∑ ñ';
echo iconv("UTF-8", "ASCII//TRANSLIT", $text), PHP_EOL;

Output:

? EUR e i u ? ? n

所需 Output:

? EUR e i u     n

據我所知,沒有可讓您指定自己的替換字符的轉換 function,但您可以通過實現自己的簡單 escaping 來解決它。

function my_translit($text, $replace='!', $in_charset='UTF-8', $out_charset='ASCII//TRANSLIT') {
    // escape existing ?
    $res = str_replace(['\\', '?'], ['\\\\', '\\?'], $text);
    // translit
    $res = iconv($in_charset, $out_charset, $res);
    // replace unescaped ?
    $res = preg_replace('/(?<!\\\\)\\?/', $replace, $res);
    // unescape
    return str_replace(['\\\\', '\\?'], ['\\', '?'], $res);
}

$text = '? € é î ü π ∑ ñ \\? \\\\? \\\\\\?';
var_dump(
    $text,
    my_translit($text)
);

結果:

string(36) "? € é î ü π ∑ ñ \? \\? \\\?"
string(29) "? EUR ! ! ! p ! ! \? \\? \\\?"

我不確定為什么音譯 output 在我的系統上不同,但字符替換有效。

暫無
暫無

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

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