アクセントのある 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);
(...)
文字列にアクセントが含まれている場合、アクセント付きの単語は無視されます。サーバーは「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 がアスペクトとして機能しない) で動作する文字列をアクセントで修正する方法、またはアクセント付きの文字をアクセントのない対応する文字に置き換える方法です。助けてください、これを修正する方法がわかりません...ありがとう