2011-07-01 3 views
0

だから、楔形文字のタブレット情報を扱うサイトで働いています。我々は、音訳のためにセミトリック文字を使用します。CakePHPのエンコーディングの問題:大文字のSをcaronで上に保存し、データベースに保存しますが、ケーキで処理中にエラーが発生します。

私のスクリプトでは、タブレットの翻訳からタームリストを作成します。

私の問題は、ケーキが特別な文字を扱う方法のために単語にスペースがあると考えているため、Šのスクリプトは2つの異なる用語を作成しました。

Exemple:タブレットの

一部内容:私のスクリプトによって処理タブレットから

  1. utu-DIŠ-nu-il2

規約:

utu-DIŠ, -nu-il2

それは次のようになります。

utu-DIŠ-nu-il2

Wh私は内容の治療の過程で私の配列の内容を印刷する途中、私はこれを参照してください。

  1. utu-DI� -nu-il2

をだから、これはテキストの正しくな解析が2つの言葉の代わりとして私のスクリプトで解釈された空間を作成する意味します1。データベースで

、テキストは大丈夫です...

私はまた、これらのエラーを取得:

Warning (512): SQL Error: 1366: Incorrect string value: '\xC5' for column 'term' at row 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 684]

Query: INSERT INTO terms (term , lft , rght) VALUES ('utu-DI�', 449, 450)

Query: INSERT INTO terms (term , lft , rght) VALUES ('A�', 449, 450)

Query: INSERT INTO terms (term , lft , rght) VALUES ('xDI�', 449, 450)

誰もが、私はこの仕事をするために何ができるか知っていますか?

ありがとうございます!

追加情報:

$terms=$this->data['Tablet']['translit']; 
$terms= str_replace(array('\r\n', '\r', '\n','\n\r','\t'), ' ', $terms); 
$terms = trim($terms, chr(173)); 
print_r($terms); 
$terms = preg_replace('/\s+/', ' ', $terms); 
$terms = explode(" ", $terms); 
$terms=array_map('trim', $terms); 
$anti_terms = array('@tablet','1.','2.','3.','4.','5.','6.','7.','7.','9.','10.','11.','12.','13.','14.','15.','16.','17.','18.','19.','20.','Rev.', 
'Obv.','@tablet','@obverse','@reverse','C1','C2','C3','C4','C5','C6','C7','C8','C9', '\r', '\n','\r\n', '\t',''. ' ', null, chr(173), 'x', '[x]','[...]'); 
foreach($terms as $key => $term) { 
    if(in_array($term, $anti_terms) || is_numeric($term)) { 
     unset($terms[$key]); 
     } 
    } 

私はプリプレグの前に私のしますprint_rを入れた場合、Sは、私は後にそれを行うならば、彼らは黒いひし形で表示し、良いです。だから私はプリグ機能が問題だと思います!


がちょうどこの発見: http://www.php.net/manual/fr/function.preg-replace.php#84385

をしかし、....

mb_ereg_replace()

はにpreg_replace()と同じ問題が発生しているようです


Solutuion:

mb_internal_encoding("UTF-8"); 
mb_regex_encoding("UTF-8"); 
$terms = mb_ereg_replace('\s+', ' ', $terms); 

エラーがなくなりました...!

+0

この [文字セット符号化をいじりPHP(http://stackoverflow.com/questions/7501924/php-messing-with-html-charset-encoding/7502564#7502564)を読み取るようにしてください –

答えて

0
mb_internal_encoding("UTF-8"); 
mb_regex_encoding("UTF-8"); 
$terms = mb_ereg_replace('\s+', ' ', $terms); 
関連する問題