从cURL页面中删除重音符号

时间:2013-04-10 05:14:58

标签: php curl character-encoding

我有一个简单的函数,它使用cURL来获取页面并取出第一个和姓氏:

$base_url = 'http://www.behindthename.com/random/random.php';
$query = http_build_query($params);
$url = $base_url . '?' . $query;

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);         
$result = curl_exec($curl);                        
curl_close($curl);

示例$ params数组可能如下所示:

Array (
    [number] => 1
    [gender] => f
    [surname] =>
    [randomsurname] => yes
    [all] => no
    [usage_lth] => 1
)

回来的一些名字中有重音符号(这很好,我希望发生这种情况)。但是,当我使用名字做某些事情时,我需要删除重音符。

我尝试过使用Wordpress's remove_accents function,但似乎永远不会传递第一个!preg_match条件。条件总是计算为true,只返回原始字符串。

但是,如果我复制粘贴带有重音符号的名称,对其进行硬编码,然后在其上运行remove_accents,一切正常。例如:

$name = 'Þýri';
echo remove_accents($name);

返回'THyri'。

我真的不明白,因为据我所知,curl_exec的结果是utf8,应该可以正常工作。

我已经尝试直接在cURL返回的结果上调用remove_accents(以确保我的拔出名称的方法没有弄乱任何东西),这也不起作用 - 重音仍然存在。

我也尝试删除!preg_match条件,在这种情况下,seem_utf8返回true,但仍然没有删除重音符。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你可以尝试一下htmlentities,该函数会将带有重音的名称转换为各自的html代码,你可以在这里阅读文档:http://php.net/manual/en/function.htmlentities.php

使用此功能将隐蔽例如:

$string = 'noè';

echo htmlentities($string);

这将输出:

noè

将被html读为

noè

否则,如果您只需要用正常字母替换重音,您可以使用str_replace函数,它将查找给定值并将其更改为目标值,这里是一个示例:

echo str_replace('è', 'e', $string);

将输出

noe

在这种情况下,您必须手动插入要替换的所有重音符。

UPDATED

在你的情况下你已经有你的口音的HTML代码,所以你可以解码它们然后用普通字母交换或存储它们的口音(可能,取决于你的数据库编码(UTF-8)应该允许你存储它们