0

PHP 文字列を onclick に渡しています。このテキストは YouTube からのものです (ビデオの説明)。場合によっては、文字列がコードを壊します。

文字 \n \r ' および " が削除されているため、どの文字が原因であるかは明らかではありません。

echo "<span onclick='update_hits(\"".$id."\");vidtxt=\"".$desc6."\";openVideo(\"".$v."\",\"".$sn." : ".addslashes($title)."\",0)'><img src='".$apng."' border='0' />Play large</span>";

問題を解決するために考えられることはすべて試しましたが、成功しませんでした。

$desc6=nl2br($desc6);
$desc6=preg_replace('/[\x00-\x1f]/', '', $desc6);
$desc6=preg_replace('/\xc2[\x80-\x9f]/', '', $desc6);
$desc6=preg_replace('/[\x7f]/', '', $desc6);
$desc6=nl2br($desc6);
$desc6 = iconv("UTF-8", "UTF-8//IGNORE", $desc6); 
$desc6=preg_replace('~\p{C}+~u', '', $desc6);
$desc6=htmlspecialchars($desc6);
$desc6=preg_replace('/[\x00-\x1F\x7F]/', '', $desc6); 
$desc6=ereg_replace('[[:cntrl:]]', '', $desc6); 
$desc6 = str_replace(chr(127), "", $desc6); 
$desc6=preg_replace('/\bKa(\W|$)/i', '', $desc6);
$desc6=addslashes($desc6); 

ほとんどの説明文字列は、他の言語のテキストを含むものであっても問題なく機能します。しかし、何かがこれを時々破ります。

英語以外の言語を表示できないことを意味する ascii だけにストリッピングしても機能します。

$desc6=preg_replace('/[^(\x20-\x7F)]*/','', $desc6);

次の例では、すべての説明が機能しますが、韓国語などの言語は正しく表示されません。

$desc6 = iconv("ISO-8859-1", "UTF-8//IGNORE", $desc6); 

何か案は?

PS :
$desc6=json_encode($desc6); すべてを壊します:(

4

2 に答える 2

3

必要なのは2つの機能だけです。

両方の動作:

echo "<span onclick='".htmlspecialchars("update_hits(".json_encode($id).");vidtxt=".json_encode($desc6).";openVideo(".json_encode($v).",".json_encode($sn." : ".$title).",0)", ENT_QUOTES)."'><img src='".htmlspecialchars($apng, ENT_QUOTES)."' border='0' />Play large</span>";
于 2012-06-07T18:22:26.980 に答える
0

.addslashes($title)."\",0) それは「\」であるべきではありません

于 2012-06-07T18:22:34.180 に答える