使用DOMElement类创建文本节点以使其不会转义using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyController : MonoBehaviour {
public float lookRadius = 10f;
Transform target;
public NavMeshAgent agent;
void Start () {
target = PlayerManager.instance.player.transform;
agent = GetComponent<NavMeshAgent> ();
if (agent.isOnNavMesh == false)
Debug.Log ("NOOOOOO");
}
void Update () {
float distance = Vector3.Distance (target.position, transform.position);
if (distance <= lookRadius){
agent.SetDestination (target.position);
}
}
void OnDrawGizmosSelected() {
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, lookRadius);
}
}
,&
等字符的正确方法是什么?
在生成包含JavaScript的<
标记时,这尤其成问题。 <script>
和<
等运营商被转义,破坏了JavaScript代码。
答案 0 :(得分:1)
您可以使用DOMDocument::createCDATASection()
创建一个文本块,使用saveHtml()
方法时不会转义字符。
$dom = new DOMDocument('1.0');
$root = $dom->createElement('html');
$root = $dom->appendChild($root);
$text = $dom->createCDATASection("some < text & with special characters");
$text = $root->appendChild($text);
var_dump($dom->saveHtml());
var_dump($dom->saveXml());
这将创建以下输出:
string(51) "<html>some < text & with special characters</html>
"
string(85) "<?xml version="1.0"?>
<html><![CDATA[some < text & with special characters]]></html>
"
如果您想使用saveXml()
并想要使用特殊字符(对于javascript),您可能需要查看comment on DOMDocument::createCDataSection():
一个常见问题似乎是向CDATA添加了javascript,浏览器抛出了javascript错误。要确保javascript工作,请在添加CDATA时使用以下代码:
<?php /** * Append Caracter Data to a node and check for a javascript node * * @param DOMElement $appendToNode * @param string $text */ function appendCdata($appendToNode, $text) { if (strtolower($appendToNode->nodeName) == 'script') { // Javascript hack $cm = $appendToNode->ownerDocument->createTextNode("\n//"); $ct = $appendToNode->ownerDocument->createCDATASection("\n" . $text . "\n//"); $appendToNode->appendChild($cm); $appendToNode->appendChild($ct); } else { // Normal CDATA node $ct = $appendToNode->ownerDocument->createCDATASection($text); $appendToNode->appendChild($ct); } } ?>
结果应为:
<script type="text/javascript"> //<![CDATA[ function someJsText() { document.write('Some js with <a href="#">HTML</a> content'); } //]]></script>
这将创建一个有效的CDATA部分,其中CDATA语法被注释掉为javascript解析器。