我正在使用symfony和简单的直接代码试图将任何特殊字符更改为A o O u U.我尝试了所有我能找到的内容
echo \Normalizer::normalize("ä");
echo htmlspecialchars("ä");
和其他一些解决方案一样,这些在线发现,但它们都不适合我,所有人都会输出
ä
而不是
a
不仅与ä相关,而且还包括我之前提到的所有其他字符。
我做错了什么?还是有其他解决方案可以做到这一点。答案 0 :(得分:0)
这样的替换是错误的,因为它会产生错误的单词(相当多的德语单词仅因变音符号的存在而不同......你甚至可以获得一些NSFW结果......)。有替代变音符号的标准官方规则:
您的示例中的Normalizer :: normalize(normalizer_normalize)最初来自java,而PHP仅支持某些版本。您是否意识到在脚本代码中输入了Unicode字符?有手册的例子:
<?php
$char_A_ring = "\xC3\x85"; // 'LATIN CAPITAL LETTER A WITH RING ABOVE' (U+00C5)
$char_combining_ring_above = "\xCC\x8A"; // 'COMBINING RING ABOVE' (U+030A)
$char_1 = Normalizer::normalize( $char_A_ring, Normalizer::FORM_C );
$char_2 = Normalizer::normalize( 'A' . $char_combining_ring_above, Normalizer::FORM_C );
echo urlencode($char_1);
echo ' ';
echo urlencode($char_2);
?>
答案 1 :(得分:0)
这个对我有用,可供进一步参考
$inputString = "Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,×,Ù,Ú,Û,Ü,Ý,Þ,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,ù,ú,û,ü,ý,þ,ÿ";
$extraCharsToRemove = array("\"","'","`","^","~");
echo str_replace($extraCharsToRemove,"",iconv("utf-8","ASCII//TRANSLIT",$inputString));
输出将是
A,A,A,A,A,AE,C,E,E,E,E,I,I,I,I,D,N,O,O,O,O,O,x,U,U,U,U,Y,Th,ss,a,a,a,a,a,a,ae,c,e,e,e,e,i,i,i,i,d,n,o,o,o,o,o,u,u,u,u,y,th,y
检查iconv以获取更多信息
答案 2 :(得分:0)
我猜你想要的是将一个字符串 transliterate - 无论它可能包含哪些特殊字符 - 到一个只包含 ASCII 编码字符的字符串。
即使您使用 PHP 的 Normalizer、Transliterator 和 ext-iconv(如其他答案所说),这也可能很复杂。
我使用 symfony/string(2019 年的第一个 released)为您完成所有这些:
use Symfony\Component\String\UnicodeString;
$myString = new UnicodeString('Ä ö Ö ü Ü');
echo $myString->ascii(); // 'A o O u U'