2012-03-04 29 views
0

str_replaceは、アクセント付きの文字をアクセントのない文字に置き換えません。それのどこが悪いんだい?アクセントを削除する - アクセントのない文字をstr_replaceの付いた文字で置き換えます。

これは予想される結果を返します:

<?php 
    $string = get_post_custom_values ("text"); 
    // Say get_post_custom_values ​​("text") equals "José José" 
    $string = str_replace(" ", "-", $string); 

    echo $string [0]; 
    // Output "José-José" 
?> 

これは動作しません:

<?php 
    $string = get_post_custom_values ("text"); 
    // Say get_post_custom_values ​​("text") equals "Joseph Joseph" 
    $string = str_replace("é", "e", $string); 

    echo $string [0]; 
    // Output "José José". Nothing has changed 
?> 

注:Google翻訳でポルトガル語からの翻訳。

+0

http://stackoverflow.com/questions/1728746/how-to-properly-handle-international-character-in-php-mysql-apache、 "PHP"セクションを参照してください。 –

答えて

0

ソースコードに保存されているように、文字éは、あなたが戻ってget_post_custom_valuesから取得したデータと同じエンコーディングではありません。エンコーディングが一致しない→同じ文字として認識されない→置き換えられない。

1

すべてのアクセント文字を削除するための簡単、安全な方法は、iconvの使用である:

setlocale(LC_ALL, "fr_CA.utf8"); // for instance 
$output = iconv("utf-8", "ascii//TRANSLIT", $input); 

あなたの現在の問題は、最も可能性の高い異なる符号化によって引き起こされます。

+0

原則はそれです。 Ok decezeとVincent、助けてくれてありがとう。 –