2017-04-08 5 views
0

私はどこに失敗があるのか​​わからない、奇妙なことがあります。Wordpress get_resultsは "&"記号を解析しています

$name = "Fast & Furious 8"; 

$res1 = $wpdb->prepare(
    " 
     SELECT 
      * 
     FROM 
      wp_dbtable 
     WHERE 
      filmname = '%s' 
     LIMIT 1 
    ", 
    $name 
); 

$res = $wpdb->get_results($res1); 

foreach($res as $reseachG) { 

} 

私は記号&に問題があります。何らかの理由で、たとえそれを行うべきであっても、テーブルから何かを引き出すことはありません。

私はこのように、代わりに変数のテキスト、それが自己を使用している場合:

$res1 = $wpdb->prepare(
    " 
     SELECT 
      * 
     FROM 
      wp_dbtable 
     WHERE 
      filmname = '%s' 
     LIMIT 1 
    ", 
    "Fast & Furious 8" 
); 

それが動作します。また、変数内の他のテキストもうまく機能します。

したがって、prepareまたはget_resultsはこのシンボルを受け入れない、または変更するようです。どうすれば解決できますか?私はインターネット上でヒントを見つけることができませんでした。

PHP-問題またはMy-SQL-問題がWordPressクラスの問題である可能性があります。

ありがとうございます。

+0

'echo"

"; print_r($res1); echo "
";'の出力は何ですか?さらに、あなたのクエリには ''%s' 'があります。あなたはそれを必要としません。 '%s'は自動的に変数名を引用符で囲みます。 –

+0

カスタムテーブルに 'Fast&Furious 8'というエントリを追加しました。最初のコードを実行してその文字列を見つけても問題はありませんでした。 – RRikesh

+0

@MerianosNikos the Outpuは: SELECT * FROM wp_dbtable WHERE filmname = 'Fast&Furious 8' LIMIT 1 –

答えて

0

上記のコードは正しいです。問題は、私がデータベースから映画名のテキストを引っ張ったということでした。彼は&をhtml-special-charsに変換しました。だから実行しなければならなかった:htmlspecialchars_decode($filmname);。すべての印刷方法が正しいテキストを印刷していたので、それを見つけるのは容易ではありませんでした。

私はインターネット上で、隠された文字とすべての本当のentitiを表示する関数を見つけました。多分それはまた、あなたのいくつかを助ける:

function hexdump ($data, $htmloutput = true, $uppercase = false, $return = false){ 
// Init 
$hexi = ''; 
$ascii = ''; 
$dump = ($htmloutput === true) ? '<pre>' : ''; 
$offset = 0; 
$len = strlen($data); 

// Upper or lower case hexadecimal 
$x = ($uppercase === false) ? 'x' : 'X'; 

// Iterate string 
for ($i = $j = 0; $i < $len; $i++) 
{ 
    // Convert to hexidecimal 
    $hexi .= sprintf("%02$x ", ord($data[$i])); 

    // Replace non-viewable bytes with '.' 
    if (ord($data[$i]) >= 32) { 
     $ascii .= ($htmloutput === true) ? 
         htmlentities($data[$i]) : 
         $data[$i]; 
    } else { 
     $ascii .= '.'; 
    } 

    // Add extra column spacing 
    if ($j === 7) { 
     $hexi .= ' '; 
     $ascii .= ' '; 
    } 

    // Add row 
    if (++$j === 16 || $i === $len - 1) { 
     // Join the hexi/ascii output 
     $dump .= sprintf("%04$x %-49s %s", $offset, $hexi, $ascii); 

     // Reset vars 
     $hexi = $ascii = ''; 
     $offset += 16; 
     $j  = 0; 

     // Add newline    
     if ($i !== $len - 1) { 
      $dump .= "\n"; 
     } 
    } 
} 

// Finish dump 
$dump .= $htmloutput === true ? 
      '</pre>' : 
      ''; 
$dump .= "\n"; 

// Output method 
if ($return === false) { 
    echo $dump; 
} else { 
    return $dump; 
} 
} 

をあなたに各charのヘキサコードともひとつひとつのスペース、ライン、特別trasformedシンボル、またはラインブレーカーを示しています。実際のデータを見るのに役立ちます。

すべてです。

関連する問題