Comment remplacer/escape U+2028 ou U+2029 caractères en PHP pour arrêter mon JSONP API de rupture

Ok je suis en cours d'exécution publique JSONP API laquelle les données sont servis à partir de mon serveur PHP. Je viens de lire cet article:

En gros si mon chaînes JSON contient un U+2028 caractères (Unicode séparateur de ligne) ou U+2029 caractères (Unicode paragraphe séparateur) alors c'est parfaitement JSON valide. Cependant lors de l'utilisation de JSONP le JSON est exécutée en tant que JavaScript et pas de chaîne de caractères en JavaScript peut contenir un littéral U+2028 ou un U+2029 que ça va casser le JavaScript. Apparemment ce n'est généralement pas un problème tant que vous utiliser un parser JSON, mais dans le cas de JSONP le navigateur est le parser JSON.

Essentiellement si ces personnages étaient à l'intérieur de chaînes dans mon JSONP données d'être envoyé au client ce serait jeter une ligne ou d'un saut de paragraphe dans la chaîne de caractères qui briserait le JavaScript et l'arrêt de l'exécution. C'est une possibilité que l'API est de l'envoi de retour du client données saisies. Quelqu'un pourrait potentiellement entrer un U+2028 ou un U+2029 dans la base de données, donc quand je l'ai envoyer en JSONP il va casser tout de la mise en œuvre à l'aide de mon API.

Donc ma question est, en PHP comment puis-je nettoyer/sortie d'échappement les données JSON pour supprimer ou de fuir le U+2028 et U+2029 caractères avant de les envoyer au client?

Actuellement mon processus est de faire un json_encode sur un tableau de données et l'envoi des données vers le client. Dois-je échapper les données par boucle à travers la matrice et le filtrage, ou échapper à tout le JSON chaîne codée à la fois?

L'autre chose est que je ne suis pas sûr de savoir comment échapper à la U+2028 et U+2029 caractères en PHP de toute façon. Puis-je simplement faire un str_replace? Je ne suis pas sûr si str_replace est multi-octets en sécurité et il n'y a pas de mb_str_replace fonction, sauf si j'utilise de la mesure. Alors, comment pensez-vous de retirer ou d'échapper à ces caractères unicode?

Merci beaucoup.

  • À moins que j'ai lu l'article de manière incorrecte, tu ne peux pas le remplacer par \u2028?
  • \u2028 et u2029 sont en unicode caractères de saut de ligne. Vous voulez que votre application afin de permettre à ces caractères dans les cordes? Sens, quelle que soit accepte ce texte sur votre serveur activement convertit CR/LF dans l'un de ces personnages, parce que pratiquement personne n'utilise les nouveaux caractères de saut de ligne. Je doute que cela. Je devine que vous voulez juste pour éliminer tous les retours à la ligne, soit CR/LF, ou les de nouveaux. Dans lequel cas, il suffit de les éliminer, au lieu d'insérer littérale des séquences d'échappement.
InformationsquelleAutor zuallauz | 2013-01-06