2015-12-15 13 views
5

表意文字のスペースはhttp://www.charbase.com/3000-unicode-ideographic-spaceです。これはCJKの句読点です。それは通常のスペースのように見えますが、実際には1の代わりに2桁の位置になります(中国語のように)PHP文字列の表意文字のスペースを置き換える方法は?

私はstr_replace(" ","",$mystring)を使用して削除しましたが、ここで入力するスペースはASCIIスペースです。また、漢字入力方式で表意文字のスペースを手動入力しようとしましたが、このように見えて、他の文字のコードの一部を取り除き、ばかげた結果を返します。

どうすればこれらのスペースを取り除くことができますか?

+0

'trim()'についてはどうですか? –

+0

@AlvaroFlañoLarrondo..申し訳ありませんが、試してみてください: 'php -r 'print trim(html_entity_decode("  a "))。 "\ n";そして '[trim()'](http://php.net/trim)には空白と見なされる文字が明記されており、0x3000はそれらの文字ではありません。 – ghoti

答えて

2

リンク先の情報ページからシンボルをコピーするだけで、文字を正常に置き換えることができました。表意文字のスペースのためにCONSTエイリアスを作成して、コーディングをより明確にして置き換えることができます。

// contains ideographic space between words 
$start = 'before after';      

// contains ideographic space in needle parameter 
$test1 = str_replace(' ', '_', $start);  

// contains ideographic space 
define('ID_SPACE', ' ');      
$test2 = str_replace(ID_SPACE, '&', $start); 

// contains normal space in needle parameter 
$test3 = str_replace(' ','_',$start);  

// make sure we are using utf8 for this test 
header('Content-Type: text/html; charset=utf-8'); 

echo $start.'<br/>'; 
echo $test1.'<br/>'; 
echo $test2.'<br/>'; 
echo $test3; 

出力:

before after 
before_after 
before&after 
before after 

編集あなたがそれを見ることはできませんが

を質問に対して、文字が示すボックスに表示されているが、単にクリックしてドラッグを同様に選択します他のテキストを入力して、必要に応じて貼り付けることができます。スペースを含む私の答えからコードをコピーすることもできます。あなたが のようなものが表示されている場合、あなたはあなたが直接自分のエスケープの数値から物事を変換することができUTF-8

enter image description here

+0

eh ...ページからシンボルをコピーする方法について教えてください.. – shenkwen

+0

追加画像を見る – WebChemist

0

にあなたの文字セットを設定する必要があります。私は何年もの間、次のような機能をしていました。私はそれを書いていない、と私はそれが私がそれを見つけた場所を思い出さないと思う。それはちょっとしたハックですが、私が思っている有用なものです。

<?php 

function code2utf($num) { 
    if($num<128)return chr($num); 
    if($num<2048)return chr(($num>>6)+192).chr(($num&63)+128); 
    if($num<65536)return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128); 
    if($num<2097152)return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128); 
    return ''; 
} 

print "a" . code2utf(0x3000) . "b" . code2utf(0x1f44d) . "\n"; 

そして、私はこれを実行すると、私は次を参照してください。

$ php -f utftest 
a b 

注意を二つの空間のように見えるものというシングルダブル幅の文字です。

おそらく、あなたはこのように、あなたの入力文字列を構築するために上記の機能を使用することができます。

str_replace(code2utf(0x3000),"",$mystring); 

WebChemistのコピー&ペーストのソリューションに対するこのようなソリューションの明白な利点は、それが完全にプログラム的だということで、プログラマーのツールの一部として特別な機能を必要としません。コードを再フォーマットするときに誤ってID_SPACE文字を上書きすることはなく、実際にコード内にその文字を入れる必要はなく、表現する必要のある他のUTF8文字に対して関数を再利用できます。もちろん


、あなたがこれを行うことが他の方法は、組み込みのPHP関数html_entity_decode()です。

$ php -r 'print html_entity_decode("a&#x3000;b&#x1f44d;") . "\n";' 
a b 
0

も私のために働いた方法、生エンコーディングそれHTMLエンティティに戻って通常の空白に& str_replaceを:以下は、HTMLは、入力として文字をエスケープ使用して、私の関数と同じ結果を生成します。

//The space we're looking out for 
$ideoSpace  = "%26%23x3000%3B"; 
$space   = "%20"; 

//Search string (Notice the wider space) 
$searchstr = "Please find me a Oil Filter"; 

//Begin conversion 
$searchstr = rawurldecode(str_replace($ideoSpace, $space, rawurlencode($searchstr))); 

//echos "Please find me a Oil Filter" 

おそらく最も洗練された解決策ではありません。しかし残念なことに、implode()は日本のお客様のために文字列を分割できなかったため、検索がうまくいっていませんでした。

関連する問題