我在XML文件中生成Wordpress中的很多帖子。担心:重音字符。
流的标题是:
<? Xml version = "1.0" encoding = "ISO-8859-15"?>
这是完整的流量:http://flux.netaffiliation.com/rsscp.php?maff=177053821BA2E13E910D54
我的网站位于utf8。
所以我使用函数utf8_encode ...但这并没有解决问题,重音总是被误解。
有没有人有想法?
编辑04-10-2011 18:02(法国时间):
这是完整的流量:http://flux.netaffiliation.com/rsscp.php?maff=177053821BA2E13E910D54
这是我的代码:
/**
* parse an rss flux from netaffiliation and convert each item to posts
* @var $flux = external link
* @return bool
*/
private function parseFluxNetAffiliation($flux)
{
$content = file_get_contents($flux);
$content = iconv("iso-8859-15", "utf-8", $content);
$xml = new DOMDocument;
$xml->loadXML($content);
//get the first link : http://www.netaffiliation.com
$link = $xml->getElementsByTagName('link')->item(0);
//echo $link->textContent;
//we get all items and create a multidimentionnal array
$items = $xml->getElementsByTagName('item');
$offers = array();
//we walk items
foreach($items as $item)
{
$childs = $item->childNodes;
//we walk childs
foreach($childs as $child)
{
$offers[$child->nodeName][] = $child->nodeValue;
}
}
unset($offers['#text']);
//we create one article foreach offer
$nbrPosts = count($offers['title']);
if($nbrPosts <= 0)
{
echo self::getFeedback("Le flux ne continent aucune offre",'error');
return false;
}
$i = 0;
while($i < $nbrPosts)
{
// Create post object
$description = '<p>'.$offers['description'][$i].'</p><p><a href="'.$offers['link'][$i].'" target="_blank">'.$offers['link'][$i].'</a></p>';
$my_post = array(
'post_title' => $offers['title'][$i],
'post_content' => $description,
'post_status' => 'publish',
'post_author' => 1,
'post_category' => array(self::getCatAffiliation())
);
// Insert the post into the database
if(!wp_insert_post($my_post));;
$i++;
}
echo self::getFeedback("Le flux a généré {$nbrPosts} article(s) depuis le flux NetAffiliation dans la catégorie affiliation",'updated');
return false;
}
所有帖子都已生成,但......重音字符很难看。您可以在此处查看结果:http://monsieur-mode.com/test/
答案 0 :(得分:2)
在不同编码之间交换时,您必须掌握很多困难。此外,使用多个字节编码字符的编码(所谓的多字节编码),如WordPress使用的UTF-8,在PHP中值得特别关注。
Content-Type
标题中使用的“另存为...”对话框中设置相同的编码。ISO-8859-15
,因此您需要使用iconv()
将其转换为UTF-8
。UTF-8
。 htmlentities()
等函数会产生奇怪的字符。对于其中许多功能,有多字节替代方案,前缀为mb_
。如果您的编码为UTF-8
,请检查您的文件是否有这些功能,并在必要时替换它们。有关这些主题的详细信息,请参阅Wikipedia about variable-width encodings和page in the PHP-Manual。
答案 1 :(得分:0)
默认情况下,大多数应用程序使用UTF-8数据并输出UTF-8内容。 Wordpress绝对不应该分开,肯定会以UTF-8为基础。
打印时我根本不会转换所有信息,而是将标题更改为UTF-8而不是ISO-8859-15。
答案 2 :(得分:0)
如果您的传入XML数据是ISO-8859-15,请使用iconv()
进行转换:
$stream = file_get_contents("stream.xml");
$stream = iconv("iso-8859-15", "utf-8", $stream);
答案 3 :(得分:0)
mb_convert_encoding()
拯救了我的生命。
这是我的解决方案:
$content = preg_replace('/ encoding="ISO-8859-15"/is','',$content);
$content = mb_convert_encoding($content,"UTF-8");