我不知道从哪里开始,但这就是我想要做的事情:
用户有一个文本字段,他们需要输入几个单词。问题是该页面将使用来自不同国家的人,他们将输入“怪异”的拉丁字符,如:ž,Ä,Ü,đ,Ť,Á等。
在保存到基础之前我想将它们转换为z,a,u,d,t,a ...有没有办法做到这一点而不做这样的事情(我认为有太多的字符要覆盖) :
$string = str_replace(array('Č','Ä','Á','đ'), array('C','A','A','d'), $string);
而且,是的,我知道我可以在数据库中保存utf-8,但问题是此字符串稍后将由SMS发送,并且由于sms协议性质,这些“特殊”字符在消息中使用的空间比常规英文字母字符(我限制为120个字符,如果我在消息中加上“Ä”,则需要超过1个字符)。
答案 0 :(得分:1)
首先,我仍然会将原始字符存储在数据库中的utf-8中。您可以在检索时始终将它们“翻译”为ASCII字符。这很好,因为如果将来SMS添加了UTF-8支持(或者您希望将用户数据用于其他内容),则原始字符将保持不变。
也就是说,您可以使用iconv
来执行此操作:
iconv('utf-8', 'ascii//TRANSLIT', $input); //where $input contains "weird" characters
有关详细信息,请参阅此主题,包括此方法的一些注意事项:PHP: Replace umlauts with closest 7-bit ASCII equivalent in an UTF-8 string
答案 1 :(得分:1)
关闭但不完美,因为它将重音和事物转换为字符。
http://www.php.net/manual/en/function.iconv.php
echo iconv("ISO-8859-1", "ASCII//TRANSLIT", 'Martín');
//output: Mart'in
echo iconv("ISO-8859-1", "ASCII//TRANSLIT", "ÆÇÈÊÈÒÐÑÕ");
//output: AEC`E^E`E`OD~N~O
使用
echo iconv('utf-8', 'ascii//TRANSLIT', 'Martín');
//output: Mart
如果重音字符不是UTF-8,它只会从特殊字符串开始切断字符串。