使用print_r的PHP西班牙语字符

时间:2011-12-16 16:27:37

标签: php character-encoding

您好我正在打印此信息:

preg_match_all($pattern2, $row['introtext'], $arr2, PREG_PATTERN_ORDER);

print_r($arr2[text][0]);

但我明白了:

  

Este curso se enfoca en proporcionar las habilidades y conocimientos necesarios para instalar,operar y localizar fallas en una redempresarialpeque adesucursal,incluyendo configurar un conmutador,un enrutador y conectar a una WAN e implementar la seguridad de la red 。 El Participante debe poder completarlaconfiguraci ninformaci ndeunapeque aredde oficina sucursalconupervisi n。

正如你所看到的,我对西班牙语字母有一个奇怪的角色。

我试过

html_entity_decode 

utf8_decode()

但那些不起作用。

是否有人对此问题有任何建议?

由于

3 个答案:

答案 0 :(得分:2)

问题通常是双重的,与PHP无关。为了使国际字符正常工作,您需要

  • 您的文件将以UTF-8(无BOM)编码
  • 要使用<meta>标记,表明该网页采用UTF-8编码。

第一个取决于您的文本编辑器。如果您告诉我们您使用的是什么,我们可以帮助您了解如何将文件放入UTF-8中。否则,你可以随时谷歌。

第二个很容易修复。只需在文档的<meta>中添加正确的<head>标记即可。例如,在HTML5中,它是:

<meta charset="utf-8">

现在,如果您因某些原因无法使用这些解决方案,则可以尝试在要打印的文本上调用htmlentities。这可行。

答案 1 :(得分:1)

html_entity_decode不起作用,因为它将字符串中的html实体(&amp; entity ;)转换为UTF-8(默认情况下)或其他字符集中的等效实体。但问题是浏览器无法识别此字符集并输出问号。

要获得出色的解释,请阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

为了改善您的问题,如果您告诉您数据库中数据的字符编码是什么(它似乎来自于代码判断),将会有所帮助。

答案 2 :(得分:0)

对原始问题的建议改进: 如果您的文本输出只来自一个文件或数据库,那么已经建议的解决方案就可以了。如果您正在访问不处理字符编码的源,您将被迫使用例如iconv("LATIN1", "UTF-8//TRANSLIT", $var)在代码中使用此类字符串。当你遇到print_r()或var_dump()等问题时,那就是这个问题。这在你的问题中并没有真正表现出来,但它仍然是一个挑战,我必须经常忍受,但我没有解决方案。