2017-02-24 16 views
0

私は、認証されたユーザーがインデックスサイトのメッセージを書き込めるサイトを作成しています。特殊文字を含む機能

メッセージ作成サイトでは、ユーザーがメッセージのタイトルを入力できるテキストボックスと、メッセージを書くことができるテキストボックスがあります。

メッセージを.txtファイルに、私はの.txtファイルのタイトルを作成していますタイトルからして、次のようにエクスポートされます:

タイトル:これはメッセージです(ファイル名は次のようになります。thisisamessage .txt)

ファイル名として元のテキストは、ファイル名が.txtのデータベースrekordに格納されます。

タイトルテキストを変換するために、私はこのようになります機能を使用しています:

それはほとんどの時間で正常に動作しますが、時にはそれがその仕事をしていませんが
function filenameconverter($title){ 
     $filename=str_replace(" ","",$title); 
     $filename=str_replace("ű","u",$filename); 
     $filename=str_replace("á","a",$filename); 
     $filename=str_replace("ú","u",$filename); 
     $filename=str_replace("ö","o",$filename); 
     $filename=str_replace("ő","o",$filename); 
     $filename=str_replace("ó","o",$filename); 
     $filename=str_replace("é","e",$filename); 
     $filename=str_replace("ü","u",$filename); 
     $filename=str_replace("í","i",$filename); 
     $filename=str_replace("Ű","U",$filename); 
     $filename=str_replace("Á","A",$filename); 
     $filename=str_replace("Ú","U",$filename); 
     $filename=str_replace("Ö","O",$filename); 
     $filename=str_replace("Ő","O",$filename); 
     $filename=str_replace("Ó","O",$filename); 
     $filename=str_replace("É","E",$filename); 
     $filename=str_replace("Ü","U",$filename); 
     $filename=str_replace("Í","I",$filename); 
     return $filename; 
    } 

。 例:「Pamutkéztörlőadagolóéshigiéniaikéztörlőadagoló」。 .txtのように。

pamutkeztorloadagoloeshigieniaikeztorloadagolo.txtとする必要があります。 しかし、時にはイムがこれを与えたときに、それは次のようになります。

pamutkă©ztă¶rlĺ'adagolăłă©shigiă©niaikă©ztă¶rlĺ'adagolăł.txt

私はハンガリーのだそうタイトルテキストもハンガリー語になります、それで私は文字を変更しなければならないのです。

私はapacheとphpmyadminでXAMPPを使用しています。

+0

だから、なぜそれを.txtファイルに保存していますか?データベースにUTF-8文字エンコーディングを使用すると、そのような置換を行う必要がなく、データベースから送信されたテキストを取得するほうが意味があります。それとも、そうしない特定の理由がありますか? – FMashiro

+0

それは私が思う問題を解決しますが、上記の機能がうまくいかない理由は何ですか? – zoldingo

+0

これは自家製の機能ですが、何が間違っているのか正確にはわかりませんが、この回答は似たような質問で役に立ちます:http://stackoverflow.com/questions/1525830/how-do-i-use-filesystem -functions-in-php-utf-8-stringsを使う – FMashiro

答えて

0

私はむしろファイルごとに生成された一意のIDをファイル名として使用し、実名を別の列に保存します。 このようにすると、ファイルを複数回アップロードするだけでファイルを上書きしないようにすることができます。それはあなたが望むものをあなたがSOにここにファイル名を清掃上のいくつかのアプローチを見つけるだろうし、私が使用していることは非常に良いものがhttp://cubiq.org/the-perfect-php-clean-url-generator

0

国際空港

である場合しかし、私はこのために手動でstr_replaceを使用することをお勧めだとは思いません目的。 PHP 5.3.0以降の同梱のintl拡張機能を使用できます。 XAMPP設定で拡張子がturned onであることを確認してください。

次に、transliterator_transliterate()関数を使用して文字列を変換します。それらを小文字に変換することもできます。クレジットはsimonsimcityになります。

<?php 
$input = 'Pamutkéztörlő adagoló és higiéniai kéztörlő adagoló'; 
$output = transliterator_transliterate('Any-Latin; Latin-ASCII; lower()', $input); 
print(str_replace(' ', '', $output)); //pamutkeztorloadagoloeshigieniaikeztorloadagolo 
?> 

P.S.残念ながら、この関数のphpマニュアルは、利用可能なトランスレータ文字列を詳しく説明していませんが、Artefactoの回答hereをご覧ください。 iconvを使用して


のiconv

おそらくまだ期待されていない発音区別符号の一部を返します。

しばらくmb_convert_encoding

print(iconv("UTF-8","ASCII//TRANSLIT",$input)); //Pamutk'ezt"orl"o adagol'o 'es higi'eniai k'ezt"orl"o adagol'o 

、ASCIIまたはUTF-8にハンガリーのISOからエンコーディング変換を使用した場合も、あなたが言及している同様の問題を提供します。

print(mb_convert_encoding($input, "ASCII", "ISO-8859-16")); //Pamutk??zt??rl?? adagol?? ??s higi??niai k??zt??rl?? adagol?? 
print(mb_convert_encoding($input, "UTF-8", "ISO-8859-16")); //PamutkéztörlŠadagoló és higiéniai kéztörlŠadagoló 

P.S.同様の質問はherehereであることがわかります。

関連する問題