用HTML实体替换preg_replacing重音字符

时间:2010-12-13 18:56:05

标签: php html preg-replace html-entities

我正在尝试使用数据库存储一组LONGTEXT,我使用表单将其输入到数据库中。但是当我把诸如é之类的字符作为从数据库中出来时,有没有办法在将所有重音字符发送到数据库之前使用PHP将它们转换为HTML实体?

我知道htmlentities ();,但这也取代了我不想要的<等字符,因为当内容回显到页面时它不会加载HTML。

先谢谢

3 个答案:

答案 0 :(得分:4)

每当您看到诸如之类的内容时,就会出现字符不匹配的迹象。

如果您的数据库和html都设置为UTF-8编码,则不会出现问题。有可能是你的HTML或数据库被设置为使用Latin-1(ISO 8859-1)而另一个是UTF-8或反之亦然。

您可以通过统一单个字符集来解决此问题。我个人更喜欢UTF-8,因为它是通用的。但是,如果您无法执行此操作,则可以使用PHP使用以下函数在UTF-8和Latin-1之间进行转换。

UTF-8到Latin-1:

$latin_string = utf8_decode($unicode_string);

Latin-1到UTF-8:

$unicode_string = utf8_encode($latin_string);

如果您在将数据发送到数据库之前对其进行编码并在显示之前对其进行解码,或者反之亦然,具体取决于您的数据库/ html配置,您的问题将得到解决。

作为另一种选择,如果您的服务器上有PHP iconv扩展,则可以使用它来准确地音译或转换为纯ASCII。

http://www.php.net/manual/en/function.iconv.php

答案 1 :(得分:1)

听起来你的数据库使用的编码不支持你的重音字符。看一下数据库和表的编码,确保它们使用的是Unicode友好的编码。我认为数据库和表的最常见首选编码只是UTF-8 Unicode(utf8)。

有关UTF8以及MySQL中的编码和排序规则的一些信息,请参阅http://dev.mysql.com/tech-resources/articles/4.1/unicode.html。您没有指定数据库,但应用程序应该是相同的。

答案 2 :(得分:0)

也许这个? http://www.php.net/manual/en/function.utf8-decode.php

部分用户评论可能是您正在寻找的内容(utf8toentities等)