显示一些字符的问题

时间:2009-12-11 20:47:42

标签: php html xml character-encoding

我有一个XML文件,我从中提取了以下文本 -

  

Sansa Clip + MP3播放器为您提供   更多享受。享受高达2,000   歌曲††配8GB *播放器,FM收音机,   长寿命电池和录音机。   现在加上更多!扩大你的   添加预装时享受   内容卡**进入新的记忆   卡槽,包括slotRadio™和   slotMusic™卡**。或者,保存自己的   音乐,播客和有声读物   microSD™/ microSDHC™存储卡**   扩大你的游戏。它带给你   由SanDisk提供令人敬畏的声音   你的音乐。只需剪辑并享受   更多音乐与令人难以置信的15   小时†以电池为燃料的乐趣。看什么   你正在用明亮的,   易于阅读的屏幕和直观   可搜索的菜单。为你的世界着色   红色,蓝色或光滑的黑色底色。

为什么它会在我的网页上显示如下,如何自动修复?感谢。

  

Sansa Clip + MP3播放器让您享受更多乐趣。享受多达2,000首歌曲 - 配备8GB *播放器,FM收音机,长寿命电池和录音机。现在加上更多!当您将预装的内容卡**添加到新的存储卡插槽中时,扩展您的乐趣,包括slotRadioâ“和slotMusicâ”卡**。或者,将您自己的音乐,播客和有声读物保存到microSDâ“¢/ microSDHC”存储卡**上以扩展您的游戏。它由SanDisk带给您,声音很棒,可以欣赏您的音乐。只需将它夹在上面,享受更多音乐,享受令人难以置信的15小时电池乐趣。通过明亮,易于阅读的屏幕和直观可搜索的菜单,了解您正在聆听的内容。用红色,蓝色或光滑的黑色底色为您的世界着色。

注意:我尝试过preinheimer的建议,

首先,我用一个效果很好的文本文件对其进行了测试。

$content = file_get_contents("test.txt");

echo htmlentities($content);

但是当我动态地尝试同样的事情时,它不起作用并且文本保持不变。

$content = $responseTemp->Items->Item->EditorialReviews->EditorialReview[$j]->Content;

echo htmlentities($content);

它们都包含相同的文本,但由于某种原因,动态版本不起作用。

另一个更新:我尝试了Juan的建议,这是一个小小的改进,但仍然无法正确再现,用问号替换了许多字符。 这是它给我的东西,

  

Sansa Clip + MP3播放器为您提供   更多享受。享受高达2,000   歌曲?配备8GB *播放器,FM收音机,   长寿命电池和录音机。   现在加上更多!扩大你的   添加预装时享受   内容卡**进入新的记忆   卡槽,包括slotRadio?和   slotMusic?牌**。或者,保存自己的   音乐,播客和有声读物   microSD?/ microSDHC?存储卡**到   扩大你的游戏。它带给你   由SanDisk提供令人敬畏的声音   你的音乐。只需剪辑并享受   更多音乐与令人难以置信的15   小时?电池驱动的乐趣。看什么   你在听着明亮的,   易于阅读的屏幕和直观   可搜索的菜单。为你的世界着色   红色,蓝色或光滑的黑色底色。

最终更新:啊哈,我的错误,我在Juan的例子中用'utf-8'替换了$ myOutputEncoding,并在head标签中添加以下内容以使其正常工作,

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

2 个答案:

答案 0 :(得分:3)

这听起来像是一个字符集问题。 幸运的是,我写了一篇今天发表的文章。 http://phpadvent.org/2009/character-sets-by-paul-reinheimer

检查XML文档中的字符集(应该位于顶部,可能是UTF-8),然后尝试使用相同的字符集为页面提供服务。

答案 1 :(得分:2)

由于您不知道原始编码,您可以尝试使用mb_detect_encoding进行猜测

$content = $responseTemp->Items->Item->EditorialReviews->EditorialReview[$j]->Content;
$encoding = mb_detect_encoding( $content );

$encodedText = mb_convert_encoding( $content, $myOutputEncoding, $encoding );

其中$myOutputEncoding是您使用的编码。然后,当您输出$encodedText时,它应该正确显示文本。