-1

我有一个简单的函数,它使用 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 的 remove_accents 函数,但它似乎从未通过第一个 !preg_match 条件。条件总是计算为真,原始字符串只会被返回。

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

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

返回'THyri'。

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

我尝试直接在 cURL 返回的结果上调用 remove_accents (以确保我提取名称的方法没有搞砸任何事情),但这也不起作用 - 重音仍然存在。

我也尝试删除 !preg_match 条件,在这种情况下,似乎_utf8 恢复为真,但重音仍然没有被删除。

我究竟做错了什么?

4

1 回答 1

0

我认为您可以尝试使用 htmlentities,该函数会将带有重音符号的名称转换为它们各自的 html 代码,您可以在此处阅读文档:http://php.net/manual/en/function.htmlentities.php

使用此功能将进行隐蔽,例如:

$string = 'noè';

echo htmlentities($string);

这将输出:

noè

Wich 将被 html 读取为

noè

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

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

将输出

noe

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

UPDATED

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

于 2013-04-10T05:25:26.347 回答