2016-05-25 5 views
-1

DBにデータを追加しました。テキストには英語とアラビア語の両方が含まれています。だから、私はウェブページにテキストを表示する必要がありますが、私は段落に合計テキストを分割しようとしています。その後PHPを使用して「 n」に関して展開されたときに「 n n」から返される文字は何ですか?

  1. 段落はArabicテキストが含まれている場合、私は「右から左へ」アライメントとdiv要素のテキスト を表示しています。
  2. テキストがEnglishの場合、「左から」のアライメントで表示されます。

    /*------ Allign text ------*/ 
    function align_text($text) 
    { 
        $string = $text; 
        $returnString = ''; 
        $paraArray = explode("\n", $string); 
        if(count($paraArray) > 0) 
        { 
         foreach($paraArray as $pa) 
         { 
          $isRight = $this->is_rtl($pa); 
          if($isRight) 
          { 
           $para['para'] = $pa; 
           $para['align'] = 'R'; 
          } 
          else 
          { 
           $para['para'] = $pa; 
           $para['align'] = 'L'; 
          } 
          $paraArr[] = $para; 
         } 
        } 
        else 
        { 
    
        } 
        return $paraArr; 
    } 
    
    function is_rtl($string) 
    { 
        $rtl_chars_pattern = '/[\x{0590}-\x{05ff}\x{0600}-\x{06ff}]/u'; 
        return preg_match($rtl_chars_pattern, $string); 
    } 
    

    は今、ここで問題です:

だからここですが、私の次のコードです。

Array ( 
      [0] => Array ( 
          [para] => This is testing mail. 
          [align] => L) 
      [1] => Array ( 
          [para] => This is testing mail. This is testing mail. This is testing mail. 
          [align] => L) 
      [2] => Array ( 
          [para] => 
          [align] => L) 
      [3] => Array ( 
          [para] => This is testing mail. 
          [align] => L)); 

あなたが見ることができるように、2行目は、(0行目から数えた場合){ [para] => }を有しています。 これは「\ n \ n」すなわち2つの連続した改行または<enter>のためです。

ここにはどのような文字が表示されますか?

私は{ [para] => }を決定することができません

<?php 
    if(!is_array($row['chatDesc'])) 
    {?> 
     <div class="com-text"> 
      <?php echo $row['chatDesc'];?> 
     </div> 
<?php 
    } 
    else 
    { 
     foreach($row['chatDesc'] as $rC) 
     { 
      echo strlen($rC['para']); 
      if(strlen($rC['para'])==1 && 
       ($rC['para']==null || $rC['para']=="" || $rC['para']==" " || $rC['para']=="\n")) 
      {?> 
       <div class="com-text" style="direction:rtl; clear:both"> 
       [AAA<?php echo $rC['para'];?>AAA] 
       </div> 
     <?php 
      } 
      else if($rC['align']=='R' && $rC['para']!=' ') 
      {?> 
       <div class="com-text" style="direction:rtl; clear:both"> 
        [<?php echo $rC['para'];?>] 
       </div> 
     <?php 
      } 
      else if($rC['align']=='L' && $rC['para']!=' ') 
      {?> 
       <div class="com-text" style="direction:ltr;clear:both"> 
        [<?php echo $rC['para'];?>] 
       </div> 
    <?php } 
     } 
    } ?> 

、このような結果を表示しようとしています。私はこれが表示されDIVなったことがないのです : -

<div class="com-text" style="direction:rtl; clear:both"> 
[AAA<?php echo $rC['para'];?>AAA] 
</div> 

しかし、私は条件を変更した場合、唯一のif(strlen($rC['para'])==1)

if(strlen($rC['para'])==1 && 
        ($rC['para']==null || $rC['para']=="" || $rC['para']==" " || $rC['para']=="\n")) 

を、divが表示されつつあります。

divの内容は[AAA AAA]です。 AAAのペアの間に余分なスペースがあります。この文字が実際に<space>である場合、なぜif statementの初期条件が満たされないのですか?

+0

は、シンボルを定義するために 'CHR()'関数を使用してみてくださいhttp://php.net/manual/en/function .chr.php – Justinas

+0

print_r()の代わりにvar_dump()を使用して、変数のタイプ、長さ、および内容の詳細を表示します。言い換えれば、 '' '' var_dump($ rC) '' ''はあなたに必要なものを提供するはずです。あなたのソースデータに応じて、 "見えない"文字は、 '' '\ r''''または他のタイプの空白文字かもしれません。 –

+1

'\ r'またはスペースにすることができます。 – AbraCadaver

答えて

2

\n\nで提供されているif文を試しましたが、うまくいきました。すべての空白文字を修正する解決策として、段落から不要な空白を削除し、段落が空でない場合にのみ配列にプッシュする関数のリファクタリングを行っています。

function align_text($text){ 
    $result = array(); 

    foreach(explode("\n", $text) as $paragraph){ 
     // Remove any whitespace from the beginning and end of the paragraph 
     $paragraph = trim($paragraph); 

     // Only append the paragraph if it's not empty 
     if(strlen($paragraph) > 0) 
      array_push($result, array('para' => $paragraph, 'align' => is_rtl($paragraph) ? 'R' : 'L')); 
    } 

    return $result; 
} 

そして、あなたがあれば、多くの場合は、あなたのHTMLにあなたのdivを表示することを必要はありません。

<?php foreach($row['chatDesc'] as $rC): ?> 
    <div class="com-text" style="direction:<?php echo $rC['align'] == 'L' ? 'ltr' : 'rtl' ?>;clear:both;"> 
     <?php echo $rC['para']; ?> 
    </div> 
<?php endforeach; ?> 

をまた、あなただけのdivの位置合わせのためのalignを使用している場合、あなたはまた、それを設定することができますalign_text関数内で直接ltrまたはrtlに移動します。

array_push($result, array('para' => $paragraph, 'align' => is_rtl($paragraph) ? 'rtl' : 'ltr')); 

その後、あなたのhtmlで、あなたは、単に整列をエコーできます

<?php foreach($row['chatDesc'] as $rC): ?> 
<div class="com-text" style="direction:<?php echo $rC['align'] ?>;clear:both;"> 
関連する問題