在字符串上使用php的mb_substr()之后会出现奇怪的字符

时间:2011-11-09 19:38:29

标签: php character-encoding multibyte-functions

我正在使用PHP(5.3.5,Ubuntu)开发一个网站,所有内容都是西班牙语。当它不适合指定的空间时,我想剪切文本。我在php文件中有以下元标记,我想这样做:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />.

该文本来自MySQL数据库,其中charset为 latin1 ,排序 latin1_spanish_ci 。我正在尝试使用mb_substr()函数剪切文本。但它无法正常工作。例如,假设我想将ShortPsicodélico剪切为ShortPsicodéli,函数将是:

mb_substr('Short Psicodélico', 0, 15, 'ISO-8859-1');

但结果是这样的: Short Psicod&amp; ea 。带有变音符号的e在&amp; ea 中被转换,我不知道为什么。我认为它与字符编码有关,但我不确切知道如何。如果我不使用此功能,则字符会按原样出现,而不是 Short Psicod&amp; ea ,它会显示ShortPsicodélico

1 个答案:

答案 0 :(得分:2)

文本在数据库中编码为"Short Psicod&eacute;lico"。您需要scrub数据库来删除编码,并修复输入例程以确保文本不会保存到编码的数据库中。