0

我不知道从哪里开始,但这是我想做的:

用户有一个文本字段,他们需要在其中输入几个单词。问题是该页面将使用来自不同国家的人,他们会输入“奇怪”的拉丁字符,如:ž、Ä、Ü、đ、Ť、Á 等。

在保存到 base 之前,我想将它们转换为 z、a、u、d、t、a... 有没有办法做到这一点而不做这样的事情(我认为有太多字符需要覆盖):

 $string = str_replace(array('Č','Ä','Á','đ'), array('C','A','A','d'), $string);

而且,是的,我知道我可以将 utf-8 保存在数据库中,但问题是这个字符串稍后将通过 SMS 发送,并且由于 sms 协议的性质,这些“特殊”字符在消息中使用的空间比普通英文字母更多字符(我限制为 120 个字符,如果我在消息中输入“Ä”,它将占用超过 1 个字符的位置)。

4

2 回答 2

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,它只会从特殊字符开始切断字符串。

于 2013-08-09T21:35:54.067 回答
1

首先,我仍然会将原始字符以 utf-8 格式存储在数据库中。您始终可以在检索时将它们“翻译”为 ASCII 字符。这很好,因为如果将来 SMS 添加 UTF-8 支持(或者您想将用户数据用于其他用途),您将拥有完整的原始字符。

也就是说,您可以使用它iconv来执行此操作:

iconv('utf-8', 'ascii//TRANSLIT', $input);  //where $input contains "weird" characters

有关更多信息,请参阅此线程,包括此方法的一些注意事项:PHP: Replace umlauts with most 7-bit ASCII equivalent in an UTF-8 string

于 2013-08-09T21:34:08.547 回答