我正在尝试管理带有重音符号的 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 不能作为方面工作)的字符串,或者如何用非重音对应物替换重音字符。请帮助我,我不知道如何解决这个问题...谢谢