2

我正在尝试管理带有重音符号的 PHP 字符串,但没有成功。(对不起我糟糕的英语)。好吧,我从 MySQL 表中读取了一个字符串:

$array_select[$i]['TestoDomanda'] = htmlspecialchars_decode( htmlentities( trim($array_select[$i]['TestoDomanda']), ENT_COMPAT, "UTF-8" ) );

该表具有 utf8 - 默认排序规则,这是建立连接的方式:

 try {
                    self::$conn = new PDO(
                                $string_dsn, 
                                $user, 
                                $password,
                                array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")     // configuring mysql connection
                    ); 
            }

在我的 HTML 页面的标题中

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">

浏览器中的可视化是可以的。我正在使用 eclipse,似乎我的 .php 文件是使用 utf-8 保存的。

我将此字符串发送到在线 Web 服务,创建一个 http 请求并接收一个 JSON 对象:

//$_testoDomanda is "Qual era il vero nome del comico Totò?"    
$testoDomanda = **urlencode**( $_testoDomanda);  // problem: ò become someting like %26ograve%3B%3F and the web service ignores the last word (tot%26ograve%3B%3F)
// I will prefere to have **"toto"** instead of **"totò"** for correct encoding

$json = new Services_JSON(); 
$request = "http://176. (.. *omissis*..) =1&q=".$testoDomanda;
$arrayResponse = file($request);
            (...)

如果字符串包含重音符号,则忽略重音符号。所以如果 $testoDomanda 是“Qual era il vero nome del comico Totò?” 服务器将收到“Qual era il vero nome del comico” 我已经尝试了很多技巧来解决这个问题,但我认为我遇到了一些编码问题,因为 var_dump($testoDomanda) 返回了错误的长度 (45)。这些是我所做的一些尝试:

$testoDomanda = urlencode(htmlspecialchars_decode(htmlentities($_testoDomanda) ));  // Qual+era+il+vero+nome+del+comico+Tot%26ograve%3B%3F
$testoDomanda = urlencode(htmlentities($_testoDomanda, ENT_COMPAT, "UTF-8"));           // Qual+era+il+vero+nome+del+comico+Tot%26amp%3Bograve%3B%3F
$testoDomanda = urlencode(htmlentities($_testoDomanda,1));                          // Qual+era+il+vero+nome+del+comico+Tot%26amp%3Bograve%3B%3F

我也尝试用“o”替换像“ò”这样的字符(搜索“Toto”会起作用)但是preg_replace()和str_replace()在我的变量中找到了“ò”。编辑:我使用这个函数(例如)替换尖音:

function replace_accents($stringa) {
        $stringa=preg_replace("/è/","e",$stringa);
        $stringa=preg_replace("/é/","e",$stringa);
        $stringa=preg_replace("/ò/","o",$stringa);
        $stringa=preg_replace("/à/","a",$stringa);
        $stringa=preg_replace("/ì/","i",$stringa);
        return $stringa;
    }

为什么这个?最后一个问题是如何使用重音来修复以奇怪模式(var_dump、str_replace、preg_replace 不能作为方面工作)的字符串,或者如何用非重音对应物替换重音字符。请帮助我,我不知道如何解决这个问题...谢谢

4

0 回答 0