[解決済み] XMLフィードのパース時にHTMLエンティティ(例:’)を同等の文字に置き換えます。
2022-02-05 07:19:11
質問
XMLフィードをパースする際、contentタグから以下のようなテキストを取得しています。
政府は、セント・ユーナンズ・カレッジの大規模な改修プロジェクトを進めるための資金提供を決定しました。これは、先月発表された、プレハブを恒久的な住居に変更するための助成金に加えてのことです。今回の助成金により、学校の一部を大規模に改修し、新しい教室を作ることができる。このプロジェクトでは、屋根の修理、除塵システムの設置、新しい科学室の備品、警報装置の設置も行われる予定である。ドニゴール州副州知事のJoe McHugh氏は、学校の経営陣の功績を称えるべきであると述べています。
例えばアポストロフィーなどのためのこれらの特殊文字(つまりHTMLエンティティ)を簡単に同等の文字に置き換える方法はないのでしょうか?
EDIT
Ti.API.info("is this real------------"+win.dataToPass)
を返します。(わかりやすくするために改行を追加)
[INFO][TiAPI ( 5437)] Is this real------------------Police in Strabane are
warning home owners and car owners in the town to be vigilant following a recent
spate of break-ins. There has been a number of thefts from gardens and vehicles
in the Jefferson Court and Carricklynn Avenue area of the town. The PSNI have
said that residents have reported seeing a dark haired male in and around the
area in the early hours of the morning. Local Cllr Karina Carlin has been
monitoring the situation – she says the problem seems to be getting
worse…….
私のexternal.jsファイルは以下の通りです。つまり、単に上のテキストを表示するものです。
var win= Titanium.UI.currentWindow;
Ti.API.info("Is this real------------------"+ win.dataToPass);
var escapeChars = { lt: '<', gt: '>', quot: '"', apos: "'", amp: '&' };
function unescapeHTML(str) {//modified from underscore.string and string.js
return str.replace(/\&([^;]+);/g, function(entity, entityCode) {
var match;
if ( entityCode in escapeChars) {
return escapeChars[entityCode];
} else if ( match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
return String.fromCharCode(parseInt(match[1], 16));
} else if ( match = entityCode.match(/^#(\d+)$/)) {
return String.fromCharCode(~~match[1]);
} else {
return entity;
}
});
}
var newText= unescapeHTML(win.datatoPass);
var label= Titanium.UI.createLabel({
color: "black",
//text: win.dataToPass,//this works!
text:newText,//this is causing an error
font: "Helvetica",
fontSize: 50,
width: "auto",
height: "auto",
textAlign: "center"
})
win.add(label);
解決方法は?
Titaniumに組み込むことができるライブラリはたくさんあります( アンダースコア.string , 文字列.js を使えば実現できるのですが、もし unescape html 関数は、上記のライブラリから引用した次のコードを試してみてください。
var escapeChars = { lt: '<', gt: '>', quot: '"', apos: "'", amp: '&' };
function unescapeHTML(str) {//modified from underscore.string and string.js
return str.replace(/\&([^;]+);/g, function(entity, entityCode) {
var match;
if ( entityCode in escapeChars) {
return escapeChars[entityCode];
} else if ( match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
return String.fromCharCode(parseInt(match[1], 16));
} else if ( match = entityCode.match(/^#(\d+)$/)) {
return String.fromCharCode(~~match[1]);
} else {
return entity;
}
});
}
これは、これらの特殊文字を人間が読みやすい派生文字に置き換え、変更後の文字列を返します。私はTitaniumでこれを使ったことがありますが、とても便利でした。
関連
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み] –のようなHTMLエンティティを同等の文字に変換するにはどうすればよいですか?
-
[解決済み] XMLのアンパサンドをエスケープして、HTMLで実体として表示するにはどうすればよいですか?
-
[解決済み] Pythonで「ElementTree」による名前空間付きXMLのパース
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】module.exports "モジュールが定義されていません"