我正在使用亚马逊的API来获取图书的描述。 API返回XML响应,并且描述标记(使用HTML)非常糟糕。为了处理这个标记不清的描述,这通常打破了我网站的布局,我正在尝试使用HTML Tidy来“清理它”。
为了防止在我的网页上显示“怪异”字符,我想我需要告诉Tidy输入编码是什么以及所需的输出编码是什么。我知道我希望输出为UTF8。但是,我不确定如何确定输入的编码(亚马逊的书籍描述)。
我尝试过这样的事情:
mb_detect_encoding($amazon_description);
这有帮助,但我偶尔会得到奇怪的角色(带有问号的黑色钻石: )。我的猜测是我没有正确检测到编码。
有什么建议我需要做什么?
修改
这是我目前的解决方案:
$sanitized_amazon_markup = preg_replace('/[^\w`~!@#$%^&*()-=_+[\]{}|;\':",.\/<>? ]/', '', $sanitized_amazon_markup);
我不确定这一点,因为这可能会删除我应该保留的内容。
答案 0 :(得分:0)
你能提供整洁的repairString调用吗?
如果您尝试使用来自整洁选项的input-encoding
和output-encoding
,请尝试不使用这些选项并使用第三个参数或repairString
代替,如下所示:
$oTidy = new tidy();
$page_content = $oTidy->repairString($page_content,
array("show-errors" => 0, "show-warnings" => false),
"utf8"
);
在做了一些测试之后,如果你在调用$page_content
repairString
中没有utf8编码,那么之前说过的话就行不通了
但如果不是UTF-8,你最终将使用ISO-8859-1(latin1)编码。
我建议你尝试一下:
$charset = mb_detect_encoding($amazon_description, 'UTF-8, ISO-8859-1');
if ($charset == "ISO-8859-1") {
$amazon_description = utf8_encode($amazon_description);
}
$oTidy = new tidy();
$amazon_description = $oTidy->repairString($amazon_description,
array("show-errors" => 0, "show-warnings" => false),
"utf8"
);