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